diff --git a/Phaser/gameobjects/Emitter.ts b/Phaser/gameobjects/Emitter.ts index 00122c3d..fdceb6c0 100644 --- a/Phaser/gameobjects/Emitter.ts +++ b/Phaser/gameobjects/Emitter.ts @@ -372,7 +372,7 @@ module Phaser { particle.acceleration.y = this.gravity; - if (this.minRotation != this.maxRotation) + if (this.minRotation != this.maxRotation && this.minRotation !== 0 && this.maxRotation !== 0) { particle.angularVelocity = this.minRotation + this._game.math.random() * (this.maxRotation - this.minRotation); } diff --git a/Phaser/gameobjects/Sprite.ts b/Phaser/gameobjects/Sprite.ts index 15fc1a57..14eb19e8 100644 --- a/Phaser/gameobjects/Sprite.ts +++ b/Phaser/gameobjects/Sprite.ts @@ -289,7 +289,7 @@ module Phaser { this._game.stage.context.fillRect(this._dx, this._dy, this._dw, this._dh); } - if (this.flipped === true || this.rotation !== 0) + if (this.flipped === true || this.rotation !== 0 || this.rotationOffset !== 0) { //this._game.stage.context.translate(0, 0); this._game.stage.context.restore(); diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 7b988313..d4bcfd6c 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -107,6 +107,10 @@ ballscroller.ts + + + blasteroids.ts + parallax.ts @@ -121,10 +125,6 @@ simple scrollzone.ts - - - texture repeat.ts - align.ts diff --git a/Tests/assets/sprites/particle1.png b/Tests/assets/sprites/particle1.png new file mode 100644 index 00000000..adf5b3c1 Binary files /dev/null and b/Tests/assets/sprites/particle1.png differ diff --git a/Tests/phaser.js b/Tests/phaser.js index 3e72f0d0..a02d494a 100644 --- a/Tests/phaser.js +++ b/Tests/phaser.js @@ -1593,7 +1593,7 @@ var Phaser; this._game.stage.context.fillStyle = 'rgb(255,255,255)'; this._game.stage.context.fillRect(this._dx, this._dy, this._dw, this._dh); } - if(this.flipped === true || this.rotation !== 0) { + if(this.flipped === true || this.rotation !== 0 || this.rotationOffset !== 0) { //this._game.stage.context.translate(0, 0); this._game.stage.context.restore(); } @@ -10469,7 +10469,7 @@ var Phaser; particle.velocity.y = this.minParticleSpeed.y; } particle.acceleration.y = this.gravity; - if(this.minRotation != this.maxRotation) { + if(this.minRotation != this.maxRotation && this.minRotation !== 0 && this.maxRotation !== 0) { particle.angularVelocity = this.minRotation + this._game.math.random() * (this.maxRotation - this.minRotation); } else { particle.angularVelocity = this.minRotation; diff --git a/Tests/scrollzones/blasteroids.js b/Tests/scrollzones/blasteroids.js new file mode 100644 index 00000000..9cb7b5fc --- /dev/null +++ b/Tests/scrollzones/blasteroids.js @@ -0,0 +1,87 @@ +/// +/// +(function () { + var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update); + function init() { + myGame.loader.addImageFile('nashwan', 'assets/sprites/xenon2_ship.png'); + myGame.loader.addImageFile('starfield', 'assets/misc/starfield.jpg'); + myGame.loader.addImageFile('jet', 'assets/sprites/particle1.png'); + myGame.loader.addImageFile('bullet', 'assets/misc/bullet1.png'); + myGame.loader.load(); + } + var scroller; + var emitter; + var ship; + var bullets; + var speed = 0; + var fireRate = 0; + var shipMotion; + function create() { + scroller = myGame.createScrollZone('starfield', 0, 0, 1024, 1024); + emitter = myGame.createEmitter(myGame.stage.centerX + 16, myGame.stage.centerY + 12); + emitter.makeParticles('jet', 250, 0, false, 0); + emitter.setRotation(0, 0); + bullets = myGame.createGroup(50); + // Create our bullet pool + for(var i = 0; i < 50; i++) { + var tempBullet = new Phaser.Sprite(myGame, myGame.stage.centerX, myGame.stage.centerY, 'bullet'); + tempBullet.exists = false; + tempBullet.rotationOffset = 90; + bullets.add(tempBullet); + } + ship = myGame.createSprite(myGame.stage.centerX, myGame.stage.centerY, 'nashwan'); + // We do this because the ship was drawn facing up, but 0 degrees is pointing to the right + ship.rotationOffset = 90; + } + function update() { + // Recycle bullets + bullets.forEach(recycleBullet); + ship.angularVelocity = 0; + if(myGame.input.keyboard.isDown(Phaser.Keyboard.LEFT)) { + ship.angularVelocity = -200; + } else if(myGame.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) { + ship.angularVelocity = 200; + } + if(myGame.input.keyboard.isDown(Phaser.Keyboard.UP)) { + speed += 0.1; + if(speed > 10) { + speed = 10; + } + } else { + speed -= 0.1; + if(speed < 0) { + speed = 0; + } + } + shipMotion = myGame.motion.velocityFromAngle(ship.angle, speed); + scroller.setSpeed(shipMotion.x, shipMotion.y); + // emit particles + if(speed > 2) { + // We use the opposite of the motion because the jets emit out the back of the ship + // The 20 and 30 values just keep them nice and fast + emitter.setXSpeed(-(shipMotion.x * 20), -(shipMotion.x * 30)); + emitter.setYSpeed(-(shipMotion.y * 20), -(shipMotion.y * 30)); + emitter.emitParticle(); + } + if(myGame.input.keyboard.isDown(Phaser.Keyboard.SPACEBAR)) { + fire(); + } + } + function recycleBullet(bullet) { + if(bullet.exists && bullet.x < -40 || bullet.x > 840 || bullet.y < -40 || bullet.y > 640) { + bullet.exists = false; + } + } + function fire() { + if(myGame.time.now > fireRate) { + var b = bullets.getFirstAvailable(); + b.x = ship.x; + b.y = ship.y - 26; + var bulletMotion = myGame.motion.velocityFromAngle(ship.angle, 400); + b.revive(); + b.angle = ship.angle; + b.velocity.setTo(bulletMotion.x, bulletMotion.y); + fireRate = myGame.time.now + 100; + } + } +})(); diff --git a/Tests/scrollzones/blasteroids.ts b/Tests/scrollzones/blasteroids.ts new file mode 100644 index 00000000..b3611525 --- /dev/null +++ b/Tests/scrollzones/blasteroids.ts @@ -0,0 +1,138 @@ +/// +/// + +(function () { + + var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update); + + function init() { + + myGame.loader.addImageFile('nashwan', 'assets/sprites/xenon2_ship.png'); + myGame.loader.addImageFile('starfield', 'assets/misc/starfield.jpg'); + myGame.loader.addImageFile('jet', 'assets/sprites/particle1.png'); + myGame.loader.addImageFile('bullet', 'assets/misc/bullet1.png'); + + myGame.loader.load(); + + } + + var scroller: Phaser.ScrollZone; + var emitter: Phaser.Emitter; + var ship: Phaser.Sprite; + var bullets: Phaser.Group; + + var speed: number = 0; + var fireRate: number = 0; + var shipMotion: Phaser.Point; + + function create() { + + scroller = myGame.createScrollZone('starfield', 0, 0, 1024, 1024); + + emitter = myGame.createEmitter(myGame.stage.centerX + 16, myGame.stage.centerY + 12); + emitter.makeParticles('jet', 250, 0, false, 0); + emitter.setRotation(0, 0); + + bullets = myGame.createGroup(50); + + // Create our bullet pool + for (var i = 0; i < 50; i++) + { + var tempBullet = new Phaser.Sprite(myGame, myGame.stage.centerX, myGame.stage.centerY, 'bullet'); + tempBullet.exists = false; + tempBullet.rotationOffset = 90; + bullets.add(tempBullet); + } + + ship = myGame.createSprite(myGame.stage.centerX, myGame.stage.centerY, 'nashwan'); + + // We do this because the ship was drawn facing up, but 0 degrees is pointing to the right + ship.rotationOffset = 90; + + } + + function update() { + + // Recycle bullets + bullets.forEach(recycleBullet); + + ship.angularVelocity = 0; + + if (myGame.input.keyboard.isDown(Phaser.Keyboard.LEFT)) + { + ship.angularVelocity = -200; + } + else if (myGame.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) + { + ship.angularVelocity = 200; + } + + if (myGame.input.keyboard.isDown(Phaser.Keyboard.UP)) + { + speed += 0.1; + + if (speed > 10) + { + speed = 10; + } + } + else + { + speed -= 0.1; + + if (speed < 0) { + speed = 0; + } + } + + shipMotion = myGame.motion.velocityFromAngle(ship.angle, speed); + + scroller.setSpeed(shipMotion.x, shipMotion.y); + + // emit particles + if (speed > 2) + { + // We use the opposite of the motion because the jets emit out the back of the ship + // The 20 and 30 values just keep them nice and fast + emitter.setXSpeed(-(shipMotion.x * 20), -(shipMotion.x * 30)); + emitter.setYSpeed(-(shipMotion.y * 20), -(shipMotion.y * 30)); + emitter.emitParticle(); + } + + if (myGame.input.keyboard.isDown(Phaser.Keyboard.SPACEBAR)) + { + fire(); + } + + } + + function recycleBullet(bullet:Phaser.Sprite) { + + if (bullet.exists && bullet.x < -40 || bullet.x > 840 || bullet.y < -40 || bullet.y > 640) + { + bullet.exists = false; + } + + } + + function fire() { + + if (myGame.time.now > fireRate) + { + var b:Phaser.Sprite = bullets.getFirstAvailable(); + + b.x = ship.x; + b.y = ship.y - 26; + + var bulletMotion = myGame.motion.velocityFromAngle(ship.angle, 400); + + b.revive(); + b.angle = ship.angle; + b.velocity.setTo(bulletMotion.x, bulletMotion.y); + + fireRate = myGame.time.now + 100; + } + + } + +})(); diff --git a/Tests/scrollzones/texture repeat.js b/Tests/scrollzones/texture repeat.js deleted file mode 100644 index 3aed931c..00000000 --- a/Tests/scrollzones/texture repeat.js +++ /dev/null @@ -1,51 +0,0 @@ -/// -/// -(function () { - var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update); - function init() { - myGame.loader.addImageFile('nashwan', 'assets/sprites/xenon2_ship.png'); - myGame.loader.addImageFile('starfield', 'assets/misc/starfield.jpg'); - myGame.loader.addImageFile('jet', 'assets/sprites/jets.png'); - myGame.loader.load(); - } - var scroller; - var emitter; - var ship; - var speed = 0; - function create() { - scroller = myGame.createScrollZone('starfield', 0, 0, 1024, 1024); - emitter = myGame.createEmitter(myGame.stage.centerX + 16, myGame.stage.centerY + 12); - emitter.makeParticles('jet', 250, 0, false, 0); - //emitter.lifespan - ship = myGame.createSprite(myGame.stage.centerX, myGame.stage.centerY, 'nashwan'); - // We do this because the ship was drawn facing up, but 0 degrees is pointing to the right - ship.rotationOffset = 90; - } - function update() { - ship.angularVelocity = 0; - if(myGame.input.keyboard.isDown(Phaser.Keyboard.LEFT)) { - ship.angularVelocity = -200; - } else if(myGame.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) { - ship.angularVelocity = 200; - } - if(myGame.input.keyboard.isDown(Phaser.Keyboard.UP)) { - speed += 0.1; - if(speed > 10) { - speed = 10; - } - } else { - speed -= 0.1; - if(speed < 0) { - speed = 0; - } - } - var motion = myGame.motion.velocityFromAngle(ship.angle, speed); - scroller.setSpeed(motion.x, motion.y); - // emit particles - if(speed > 2) { - emitter.setXSpeed(-(motion.x * 20), -(motion.x * 30)); - emitter.setYSpeed(-(motion.y * 20), -(motion.y * 30)); - emitter.emitParticle(); - } - } -})(); diff --git a/Tests/scrollzones/texture repeat.ts b/Tests/scrollzones/texture repeat.ts deleted file mode 100644 index 2ada7f16..00000000 --- a/Tests/scrollzones/texture repeat.ts +++ /dev/null @@ -1,85 +0,0 @@ -/// -/// - -(function () { - - var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update); - - function init() { - - myGame.loader.addImageFile('nashwan', 'assets/sprites/xenon2_ship.png'); - myGame.loader.addImageFile('starfield', 'assets/misc/starfield.jpg'); - myGame.loader.addImageFile('jet', 'assets/sprites/jets.png'); - - myGame.loader.load(); - - } - - var scroller: Phaser.ScrollZone; - var emitter: Phaser.Emitter; - var ship: Phaser.Sprite; - - var speed: number = 0; - - function create() { - - scroller = myGame.createScrollZone('starfield', 0, 0, 1024, 1024); - - emitter = myGame.createEmitter(myGame.stage.centerX + 16, myGame.stage.centerY + 12); - emitter.makeParticles('jet', 250, 0, false, 0); - //emitter.lifespan - - - ship = myGame.createSprite(myGame.stage.centerX, myGame.stage.centerY, 'nashwan'); - - // We do this because the ship was drawn facing up, but 0 degrees is pointing to the right - ship.rotationOffset = 90; - - } - - function update() { - - ship.angularVelocity = 0; - - if (myGame.input.keyboard.isDown(Phaser.Keyboard.LEFT)) - { - ship.angularVelocity = -200; - } - else if (myGame.input.keyboard.isDown(Phaser.Keyboard.RIGHT)) - { - ship.angularVelocity = 200; - } - - if (myGame.input.keyboard.isDown(Phaser.Keyboard.UP)) - { - speed += 0.1; - - if (speed > 10) - { - speed = 10; - } - } - else - { - speed -= 0.1; - - if (speed < 0) { - speed = 0; - } - } - - var motion:Phaser.Point = myGame.motion.velocityFromAngle(ship.angle, speed); - - scroller.setSpeed(motion.x, motion.y); - - // emit particles - if (speed > 2) - { - emitter.setXSpeed(-(motion.x * 20), -(motion.x * 30)); - emitter.setYSpeed(-(motion.y * 20), -(motion.y * 30)); - emitter.emitParticle(); - } - - } - -})(); diff --git a/build/phaser.js b/build/phaser.js index 3e72f0d0..a02d494a 100644 --- a/build/phaser.js +++ b/build/phaser.js @@ -1593,7 +1593,7 @@ var Phaser; this._game.stage.context.fillStyle = 'rgb(255,255,255)'; this._game.stage.context.fillRect(this._dx, this._dy, this._dw, this._dh); } - if(this.flipped === true || this.rotation !== 0) { + if(this.flipped === true || this.rotation !== 0 || this.rotationOffset !== 0) { //this._game.stage.context.translate(0, 0); this._game.stage.context.restore(); } @@ -10469,7 +10469,7 @@ var Phaser; particle.velocity.y = this.minParticleSpeed.y; } particle.acceleration.y = this.gravity; - if(this.minRotation != this.maxRotation) { + if(this.minRotation != this.maxRotation && this.minRotation !== 0 && this.maxRotation !== 0) { particle.angularVelocity = this.minRotation + this._game.math.random() * (this.maxRotation - this.minRotation); } else { particle.angularVelocity = this.minRotation;