From 39cae4cc09884dcf73e5932ffac50605c0fca717 Mon Sep 17 00:00:00 2001 From: Richard Davey Date: Sat, 14 Dec 2013 02:22:14 +0000 Subject: [PATCH] Sphere snake wip demo --- examples/assets/games/snake/sprites.png | Bin 0 -> 5684 bytes examples/wip/snake2.js | 127 ++++++++++++++++++++---- 2 files changed, 106 insertions(+), 21 deletions(-) create mode 100644 examples/assets/games/snake/sprites.png diff --git a/examples/assets/games/snake/sprites.png b/examples/assets/games/snake/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7102bf358df678d933ca38d49cafad01b06630 GIT binary patch literal 5684 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 literal 0 HcmV?d00001 diff --git a/examples/wip/snake2.js b/examples/wip/snake2.js index 185a29f4..c67cd7c3 100644 --- a/examples/wip/snake2.js +++ b/examples/wip/snake2.js @@ -1,35 +1,69 @@ -// Snake by Patrick OReilly and Richard Davey -// Twitter: @pato_reilly Web: http://patricko.byethost9.com - -var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update,render : render }); +var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render }); function preload() { - game.load.image('ball','assets/sprites/shinyball.png'); + game.load.spritesheet('snake','assets/games/snake/sprites.png', 32, 32); + game.load.image('ball', 'assets/sprites/pangball.png'); } +var snake; + var snakeHead; //head of snake sprite -var snakeSection = new Array(); //array of sprites that make the snake body sections -var snakePath = new Array(); //arrary of positions(points) that have to be stored for the path the sections follow -var numSnakeSections = 6; //number of snake body sections +var snakePath = []; //arrary of positions(points) that have to be stored for the path the sections follow +var numSnakeSections = 10; //number of snake body sections var snakeSpacer = 6; //parameter that sets the spacing between sections +var snakeSpeed = 250; +var snakeLength = 10; + +var fruit; + +var snakeCircles = []; +var node; +var ball; function create() { game.world.setBounds(0, 0, 800, 600); + game.stage.backgroundColor = '#0f4e93'; + cursors = game.input.keyboard.createCursorKeys(); - snakeHead = game.add.sprite(400, 300, 'ball'); + snake = game.add.group(); + + snakeHead = snake.create(400, 300, 'snake', 5); snakeHead.anchor.setTo(0.5, 0.5); + snakeHead.animations.add('chomp', [5, 6], 10, true); + snakeHead.play('chomp'); + snakeHead.body.collideWorldBounds = true; + snakeCircles.push(new Phaser.Circle(snakeHead.x, snakeHead.y, 16)); // Init snakeSection array for (var i = 1; i <= numSnakeSections-1; i++) { - snakeSection[i] = game.add.sprite(400, 300, 'ball'); - snakeSection[i].anchor.setTo(0.5, 0.5); + var snakeSection = snake.create(400, 300, 'snake', 7); + snakeSection.anchor.setTo(0.5, 0.5); + snakeSection.animations.add('walk', [7, 8, 9, 10], 10, true); + snakeSection.play('walk'); + snakeCircles.push(new Phaser.Circle(400, 300, 16)); + + if (i > snakeLength) + { + snakeSection.visible = false; + } } + + node = new Phaser.Circle(300, 300, 170); + ball = game.add.sprite(node.x, node.y, 'ball'); + ball.anchor.setTo(0.5, 0.5); + + // fruit = game.add.group(); + + // for (var i = 0; i < 20; i++) + // { + // fruit.create(game.world.randomX, game.world.randomY, 'snake', 2); + // } // Init snakePath array for (var i = 0; i <= numSnakeSections * snakeSpacer; i++) @@ -37,21 +71,51 @@ function create() { snakePath[i] = new Phaser.Point(400, 300); } - //snakeHead.body.velocity.setTo(0 +} + +function newNode() { + + node.x = game.rnd.integerInRange(100, 700); + node.y = game.rnd.integerInRange(100, 500); + ball.x = node.x; + ball.y = node.y; + ball.alpha = 1; } function update() { - // snakeHead.body.velocity.setTo(0, 0); + // game.physics.collide(snakeHead, fruit, eatFruit); + + var enclosed = true; + + for (var i = 0; i <= numSnakeSections - 1; i++) + { + if (Phaser.Circle.intersects(snakeCircles[i], node) === false) + { + enclosed = false; + break; + } + } + + if (enclosed) + { + ball.alpha -= 0.02; + + if (ball.alpha <= 0) + { + newNode(); + } + } + snakeHead.body.angularVelocity = 0; // if (cursors.up.isDown) // { - snakeHead.body.velocity.copyFrom(game.physics.velocityFromAngle(snakeHead.angle, 200)); + snakeHead.body.velocity.copyFrom(game.physics.velocityFromAngle(snakeHead.angle, snakeSpeed)); - // Everytime the snake head moves, insert the new location at the start of the array, - // and knock the last position off the end + snakeCircles[0].x = snakeHead.x; + snakeCircles[0].y = snakeHead.y; var part = snakePath.pop(); @@ -61,24 +125,45 @@ function update() { for (var i = 1; i <= numSnakeSections - 1; i++) { - snakeSection[i].x = (snakePath[i * snakeSpacer]).x; - snakeSection[i].y = (snakePath[i * snakeSpacer]).y; + var x = (snakePath[i * snakeSpacer]).x; + var y = (snakePath[i * snakeSpacer]).y; + snake.getAt(i).x = x; + snake.getAt(i).y = y; + snakeCircles[i].x = x; + snakeCircles[i].y = y; } // } if (cursors.left.isDown) { - snakeHead.body.angularVelocity = -300; + snakeHead.body.angularVelocity = -220; } else if (cursors.right.isDown) { - snakeHead.body.angularVelocity = 300; + snakeHead.body.angularVelocity = 220; } } +function eatFruit(snakeHead, fruit) { + + fruit.kill(); + + snakeLength++; + + snake.getAt(snakeLength).visible = true; + snakeSpeed += 10; + +} + function render() { - // game.debug.renderSpriteInfo(snakeHead, 32, 32); + //game.debug.renderCircle(node); + + for (var i = 0; i <= numSnakeSections - 1; i++) + { + //game.debug.renderCircle(snakeCircles[i], 'rgb(255,0,0)'); + } + } \ No newline at end of file