Skip to content

Commit

Permalink
Added blaster example to the Test Suite and fixed a rotation bug in t…
Browse files Browse the repository at this point in the history
…he particle emitter.
  • Loading branch information
photonstorm committed Apr 23, 2013
1 parent 6466361 commit 268470e
Show file tree
Hide file tree
Showing 10 changed files with 235 additions and 146 deletions.
2 changes: 1 addition & 1 deletion Phaser/gameobjects/Emitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
2 changes: 1 addition & 1 deletion Phaser/gameobjects/Sprite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
8 changes: 4 additions & 4 deletions Tests/Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@
<DependentUpon>ballscroller.ts</DependentUpon>
</Content>
<TypeScriptCompile Include="scrollzones\parallax.ts" />
<TypeScriptCompile Include="scrollzones\blasteroids.ts" />
<Content Include="scrollzones\blasteroids.js">
<DependentUpon>blasteroids.ts</DependentUpon>
</Content>
<Content Include="scrollzones\parallax.js">
<DependentUpon>parallax.ts</DependentUpon>
</Content>
Expand All @@ -121,10 +125,6 @@
<Content Include="scrollzones\simple scrollzone.js">
<DependentUpon>simple scrollzone.ts</DependentUpon>
</Content>
<TypeScriptCompile Include="scrollzones\texture repeat.ts" />
<Content Include="scrollzones\texture repeat.js">
<DependentUpon>texture repeat.ts</DependentUpon>
</Content>
<Content Include="sprites\align.js">
<DependentUpon>align.ts</DependentUpon>
</Content>
Expand Down
Binary file added Tests/assets/sprites/particle1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions Tests/phaser.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
Expand Down Expand Up @@ -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;
Expand Down
87 changes: 87 additions & 0 deletions Tests/scrollzones/blasteroids.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
/// <reference path="../../Phaser/Game.ts" />
/// <reference path="../../Phaser/gameobjects/ScrollZone.ts" />
(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;
}
}
})();
138 changes: 138 additions & 0 deletions Tests/scrollzones/blasteroids.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
/// <reference path="../../Phaser/Game.ts" />
/// <reference path="../../Phaser/gameobjects/ScrollZone.ts" />

(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;
}

}

})();
51 changes: 0 additions & 51 deletions Tests/scrollzones/texture repeat.js

This file was deleted.

Loading

0 comments on commit 268470e

Please sign in to comment.