espace Posted February 7, 2017 Share Posted February 7, 2017 hi, i start using the bullet in phaser and i would to know how to access to a specific bullet. i don't see how to access for example the bullet[1] ? could you give me the solution ? thanks bullet_group=function(game,frequency,_character){ this._character=_character this.frequency=frequency Phaser.Group.call(this,game) this.enableBody=true this.physicsBodyType= Phaser.Physics.ARCADE this.bullet this.time=0 this.canon=game.add.sprite(0,400,'rect') this.canon.alpha=0 for (var i = 0; i < 8; i++) { var b = this.create(0, 0, 'rect'); b.name = 'bullet' + i; b.tint=0x000000 b.exists = false; b.visible = false; b.checkWorldBounds = true; b.explode=this.explode_bullet() b.events.onOutOfBounds.add(resetBullet, this); } this.fire() } bullet_group.prototype = Object.create(Phaser.Group.prototype); bullet_group.prototype.constructor = bullet_group; bullet_group.prototype.fireBullet = function() { if (game.time.now > this.time) { this.bullet = this.getFirstExists(false); if (this.bullet) { this.bullet.reset(this.canon.x, this.canon.y); this.bullet.body.velocity.x= 300; this.bullet_time = game.time.now + 550; } } } bullet_group.prototype.fire = function() { game.time.events.loop(this.frequency,this.fireBullet,this) } Link to comment Share on other sites More sharing options...
ldd Posted February 7, 2017 Share Posted February 7, 2017 easy peasy // other code goes here... this.canon=game.add.sprite(0,400,'rect') this.canon.alpha=0 this.bullets=[] for (var i = 0; i < 8; i++) { this.bullets[i] = this.create(0, 0, 'rect'); this.bullets[i].name = 'bullet' + i; // etc } this.fire() That should solve your problems. I would probably use a Group and createMultiple instead. http://phaser.io/docs/2.6.2/Phaser.Group.html#createMultiple Read the documentation of Phaser.Group for other ways to add/remove things in a more efficient way. Even if you don't want to, you can always just keep and array like I said. If you had a Group, you can make sure only bullets are added and access myGroup.children instead. Link to comment Share on other sites More sharing options...
espace Posted February 7, 2017 Author Share Posted February 7, 2017 thanks you solved Link to comment Share on other sites More sharing options...
espace Posted February 8, 2017 Author Share Posted February 8, 2017 hi again, i have a question when i create a new bullet the second bullet have the same angle than the first. changing my velocity.x and velocity.y change nothing ... could you take a look ? bullet_group=function(game,frequency,_character,xv,yv,posx,posy){ this._character=_character this.frequency=frequency this.posx=posx this.posy=posy this.xv=xv this.yv=yv Phaser.Group.call(this,game) this.enableBody=true this.physicsBodyType= Phaser.Physics.ARCADE this.bullet this.time=0 this.canon=game.add.sprite(this.posx,this.posy,'rect') this.canon.alpha=0 this.bullets=[] for (var i = 0; i < 8; i++) { this.bullets[i] = this.create(0, 0, 'rect'); this.bullets[i].name = i this.bullets[i].tint=0x000000 this.bullets[i].exists = false; this.bullets[i].visible = false; this.bullets[i].checkWorldBounds = true; } this.fire() } bullet_group.prototype = Object.create(Phaser.Group.prototype); bullet_group.prototype.constructor = bullet_group; bullet_group.prototype.fireBullet = function() { if (game.time.now > this.time) { this.bullet = this.getFirstExists(false); if (this.bullet) { this.bullet.reset(this.canon.x,this.canon.y); this.bullet.body.velocity.y= this.xy; this.bullet.body.velocity.x= this.xv; this.bullet_time = game.time.now + 550; } } } bullet_group.prototype.fire = function() { game.time.events.loop(this.frequency,this.fireBullet,this) } var game_state = { create: function(){ this.canon=[] this.canon[0]=new bullet_group(game,1800,this.hero,300,300,0,400) this.canon[1]=new bullet_group(game,1000,this.hero,-50,-200,500,800) for (var i = 0; i < this.canon.length; i++){ game.add.existing(this.canon[i]) } game.add.existing(this.hero) }, } Link to comment Share on other sites More sharing options...
Recommended Posts