mirror of
https://github.com/photonstorm/phaser
synced 2024-11-24 21:53:59 +00:00
184 lines
No EOL
4.4 KiB
TypeScript
184 lines
No EOL
4.4 KiB
TypeScript
/// <reference path="phaser.d.ts" />
|
|
|
|
module BasicGame
|
|
{
|
|
export class GameState extends Phaser.State {
|
|
private _ball:Phaser.Sprite;
|
|
private _paddle:Phaser.Sprite;
|
|
private _bricks:Phaser.Group;
|
|
|
|
private _ballOnPaddle:boolean;
|
|
|
|
private _lives:number;
|
|
private _score:number;
|
|
|
|
private _scoreText:Phaser.Text;
|
|
private _livesText:Phaser.Text;
|
|
private _introText:Phaser.Text;
|
|
|
|
private _s:Phaser.TileSprite;
|
|
|
|
create():void {
|
|
this.game.world.height = 620;
|
|
|
|
this._ballOnPaddle = true;
|
|
this._score = 0;
|
|
this._lives = 3;
|
|
|
|
this._s = this.game.add.tileSprite(0,0,800,600,"starfield");
|
|
|
|
var brick:Phaser.Sprite;
|
|
this._bricks = this.game.add.group();
|
|
|
|
for( var y=0; y < 4; y++ )
|
|
{
|
|
for( var x=0; x < 15; x++)
|
|
{
|
|
brick = this._bricks.create(120 + ( x * 36 ), 100 + ( y * 52 ),"breakout","brick_" + ( y+1 ) + "_1.png");
|
|
brick.body.bounce.setTo(1, 1);
|
|
brick.body.immovable = true;
|
|
}
|
|
}
|
|
|
|
this._paddle = this.game.add.sprite( this.game.world.centerX, 500, "breakout", "paddle_big.png");
|
|
this._paddle.anchor.setTo(0.5,0.5);
|
|
this._paddle.body.collideWorldBounds = true;
|
|
this._paddle.body.bounce.setTo(1,1);
|
|
this._paddle.body.immovable = true;
|
|
|
|
this._ball = this.game.add.sprite( this.game.world.centerX, this._paddle.y - 16, "breakout",'ball_1.png');
|
|
this._ball.anchor.setTo(0.5,0.5);
|
|
this._ball.body.collideWorldBounds = true;
|
|
|
|
this._ball.body.bounce.setTo(1,1);
|
|
this._ball.animations.add("spin", ["ball_1.png", "ball_2.png", "ball_3.png", "ball_4.png", "ball_5.png" ], 50, true, false);
|
|
|
|
this._scoreText = this.game.add.text(32, 550, "score: 0", {font: "20px Arial", fill: "#ffffff", align: "left" });
|
|
this._livesText = this.game.add.text(680, 550, "lives: 3", {font: "20px Arial", fill: "#ffffff", align: "left" });
|
|
this._introText = this.game.add.text(this.game.world.centerX, 400, "- click to start -", {font: "40px Arial", fill: "#ffffff", align: "center" });
|
|
this._introText.anchor.setTo(0.5,0.5);
|
|
|
|
this.game.input.onDown.add( this.releaseBall, this );
|
|
|
|
this._ballOnPaddle = true;
|
|
|
|
}
|
|
|
|
update():void
|
|
{
|
|
this._paddle.x = this.game.input.x;
|
|
|
|
if( this._paddle.x < 24 )
|
|
{
|
|
this._paddle.x = 24;
|
|
}
|
|
else if( this._paddle.x > this.game.width - 24 )
|
|
{
|
|
this._paddle.x = this.game.width - 24;
|
|
}
|
|
|
|
if( this._ballOnPaddle )
|
|
{
|
|
this._ball.x = this._paddle.x;
|
|
}
|
|
else
|
|
{
|
|
this.game.physics.collide( this._ball, this._paddle, this.ballHitPaddle, null, this );
|
|
this.game.physics.collide( this._ball, this._bricks, this.ballHitBrick, null, this );
|
|
}
|
|
|
|
if( this._ball.y > 600 && this._ballOnPaddle == false )
|
|
{
|
|
this.ballLost();
|
|
}
|
|
}
|
|
|
|
private quitGame( p_pointer?:any ):void
|
|
{
|
|
this.game.state.start("MainMenu");
|
|
}
|
|
|
|
private releaseBall():void
|
|
{
|
|
if( this._ballOnPaddle )
|
|
{
|
|
this._ballOnPaddle = false;
|
|
this._ball.body.velocity.y = -300;
|
|
this._ball.body.velocity.x = -75;
|
|
this._ball.animations.play("spin");
|
|
this._introText.visible = false;
|
|
}
|
|
}
|
|
|
|
private ballLost():void
|
|
{
|
|
this._lives--;
|
|
|
|
if( this._lives == 0)
|
|
{
|
|
this.gameOver();
|
|
}
|
|
else
|
|
{
|
|
this._livesText.content = "lives: " + this._lives;
|
|
this._ballOnPaddle = true;
|
|
this._ball.body.velocity.setTo(0,0);
|
|
this._ball.x = this._paddle.x + 16;
|
|
this._ball.y = this._paddle.y - 16;
|
|
this._ball.animations.stop();
|
|
}
|
|
}
|
|
|
|
private gameOver():void
|
|
{
|
|
this._ball.body.velocity.setTo(0,0);
|
|
|
|
this.quitGame();
|
|
}
|
|
|
|
private ballHitBrick( p_ball:Phaser.Sprite, p_brick:Phaser.Sprite ):void
|
|
{
|
|
p_brick.kill();
|
|
|
|
this._score += 10;
|
|
this._scoreText.content = "score: " + this._score;
|
|
|
|
if( this._bricks.countLiving() == 0 )
|
|
{
|
|
this._score += 1000;
|
|
this._scoreText.content = "score: " + this._score;
|
|
this._introText.content = "- Next Level -";
|
|
|
|
this._ballOnPaddle = true;
|
|
this._ball.body.velocity.setTo(0,0);
|
|
this._ball.x = this._paddle.x + 16;
|
|
this._ball.y = this._paddle.y - 16;
|
|
this._ball.animations.stop();
|
|
|
|
this._bricks.callAll('revive');
|
|
}
|
|
|
|
|
|
}
|
|
|
|
private ballHitPaddle( p_ball:Phaser.Sprite, p_paddle:Phaser.Sprite ):void
|
|
{
|
|
var l_diff:number = 0;
|
|
|
|
if( p_ball.x < p_paddle.x )
|
|
{
|
|
l_diff = p_paddle.x - p_ball.x;
|
|
p_ball.body.velocity.x = (-10 * l_diff);
|
|
}
|
|
else if( p_ball.x > p_paddle.x )
|
|
{
|
|
l_diff = p_ball.x - p_paddle.x;
|
|
p_ball.body.velocity.x = (10 * l_diff);
|
|
}
|
|
else
|
|
{
|
|
p_ball.body.velocity.x = 2 + Math.random() * 8;
|
|
}
|
|
}
|
|
}
|
|
} |