mirror of
https://github.com/photonstorm/phaser
synced 2024-11-23 13:13:43 +00:00
StateManager fixes for when you change state in the create function.
TilemapLayer update for WebGL.
This commit is contained in:
parent
d958b34f43
commit
994eaff92b
11 changed files with 310 additions and 88 deletions
39
examples/assets/tilemaps/maps/phaser_tiles.json
Normal file
39
examples/assets/tilemaps/maps/phaser_tiles.json
Normal file
|
@ -0,0 +1,39 @@
|
|||
{ "height":6,
|
||||
"layers":[
|
||||
{
|
||||
"data":[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
|
||||
"height":6,
|
||||
"name":"Ground",
|
||||
"opacity":1,
|
||||
"type":"tilelayer",
|
||||
"visible":true,
|
||||
"width":6,
|
||||
"x":0,
|
||||
"y":0
|
||||
}],
|
||||
"orientation":"orthogonal",
|
||||
"properties":
|
||||
{
|
||||
|
||||
},
|
||||
"tileheight":100,
|
||||
"tilesets":[
|
||||
{
|
||||
"firstgid":1,
|
||||
"image":"C:\/Program Files (x86)\/Tiled\/examples\/tmw_desert_spacing.png",
|
||||
"imageheight":607,
|
||||
"imagewidth":607,
|
||||
"margin":1,
|
||||
"name":"Desert",
|
||||
"properties":
|
||||
{
|
||||
|
||||
},
|
||||
"spacing":1,
|
||||
"tileheight":100,
|
||||
"tilewidth":100
|
||||
}],
|
||||
"tilewidth":100,
|
||||
"version":1,
|
||||
"width":6
|
||||
}
|
BIN
examples/assets/tilemaps/tiles/phaser_tiles.png
Normal file
BIN
examples/assets/tilemaps/tiles/phaser_tiles.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
|
@ -1,13 +1,12 @@
|
|||
// mods by Patrick OReilly
|
||||
// Twitter: @pato_reilly Web: http://patricko.byethost9.com
|
||||
// twitter: @pato_reilly
|
||||
|
||||
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
function preload() {
|
||||
|
||||
game.load.tilemap('matching', 'assets/maps/phaser_tiles.json', null, Phaser.Tilemap.TILED_JSON);
|
||||
game.load.image('tiles', 'assets/tiles/phaser_tiles.png');
|
||||
|
||||
game.load.tilemap('matching', 'assets/tilemaps/maps/phaser_tiles.json', null, Phaser.Tilemap.TILED_JSON);
|
||||
game.load.tileset('tiles', 'assets/tilemaps/tiles/phaser_tiles.png', 100, 100, -1, 1, 1);
|
||||
}
|
||||
|
||||
var timeCheck = 0;
|
||||
|
@ -37,36 +36,39 @@ var tileBack = 25;
|
|||
var timesUp = '+';
|
||||
var youWin = '+';
|
||||
|
||||
|
||||
function create() {
|
||||
|
||||
map = game.add.tilemap('matching');
|
||||
map = game.add.tilemap('matching');
|
||||
|
||||
// tileset = game.add.tileset('tiles');
|
||||
tileset = game.add.tileset('tiles');
|
||||
|
||||
layer = game.add.tilemapLayer(0, 0, 600, 600, tileset, map, 0);
|
||||
|
||||
// layer = game.add.tilemapLayer(0, 0, 600, 600, tileset, map, 0);
|
||||
|
||||
marker = game.add.graphics();
|
||||
marker.lineStyle(2, 0x00FF00, 1);
|
||||
marker.drawRect(0, 0, 100, 100);
|
||||
//layer.resizeWorld();
|
||||
|
||||
marker = game.add.graphics();
|
||||
marker.lineStyle(2, 0x00FF00, 1);
|
||||
marker.drawRect(0, 0, 100, 100);
|
||||
|
||||
randomizeTiles();
|
||||
|
||||
}
|
||||
|
||||
function update() {
|
||||
|
||||
|
||||
countDownTimer();
|
||||
|
||||
|
||||
if (layer.getTileX(game.input.activePointer.worldX) <= 5) // to prevent the marker from going out of bounds
|
||||
{
|
||||
marker.x = layer.getTileX(game.input.activePointer.worldX) * 100;
|
||||
marker.y = layer.getTileY(game.input.activePointer.worldY) * 100;
|
||||
}
|
||||
|
||||
if (flipFlag == true)
|
||||
if (flipFlag == true)
|
||||
{
|
||||
if (game.time.now - timeCheck > 1000)
|
||||
{
|
||||
if (game.time.now - timeCheck >1000)
|
||||
{
|
||||
flipBack();
|
||||
}
|
||||
}
|
||||
|
@ -74,97 +76,93 @@ function update() {
|
|||
{
|
||||
processClick();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function countDownTimer() {
|
||||
|
||||
|
||||
var timeLimit = 120;
|
||||
|
||||
|
||||
myTime = game.time.now;
|
||||
mySeconds = parseInt(myTime / 1000);
|
||||
mySeconds = parseInt(myTime/1000);
|
||||
myCountdownSeconds = timeLimit - mySeconds;
|
||||
|
||||
if (myCountdownSeconds <= 0)
|
||||
{
|
||||
|
||||
if (myCountdownSeconds <= 0)
|
||||
{
|
||||
// time is up
|
||||
timesUp = 'Time is up!';
|
||||
timesUp = 'Time is up!';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function processClick() {
|
||||
|
||||
|
||||
currentTile = map.getTile(layer.getTileX(marker.x), layer.getTileY(marker.y));
|
||||
currentTilePosition = ((layer.getTileY(game.input.activePointer.worldY) + 1) * 6) - (6 - (layer.getTileX(game.input.activePointer.worldX) + 1));
|
||||
|
||||
currentTilePosition = ((layer.getTileY(game.input.activePointer.worldY)+1)*6)-(6-(layer.getTileX(game.input.activePointer.worldX)+1));
|
||||
|
||||
if (game.input.mousePointer.isDown)
|
||||
{
|
||||
{
|
||||
// check to make sure the tile is not already flipped
|
||||
if (currentTile == tileBack)
|
||||
if (currentTile == tileBack)
|
||||
{
|
||||
// get the corresponding item out of squareList
|
||||
currentNum = squareList[currentTilePosition - 1];
|
||||
currentNum = squareList[currentTilePosition-1];
|
||||
flipOver();
|
||||
squareCounter++;
|
||||
|
||||
squareCounter++;
|
||||
// is the second tile of pair flipped?
|
||||
if (squareCounter == 2)
|
||||
if (squareCounter == 2)
|
||||
{
|
||||
// reset squareCounter
|
||||
squareCounter = 0;
|
||||
square2Num = currentNum;
|
||||
|
||||
// check for match
|
||||
if (square1Num == square2Num)
|
||||
{
|
||||
masterCounter++;
|
||||
|
||||
if (masterCounter == 18)
|
||||
masterCounter++;
|
||||
|
||||
if (masterCounter == 18)
|
||||
{
|
||||
// go "win"
|
||||
youWin = 'Got them all!';
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
savedSquareX2 = layer.getTileX(marker.x);
|
||||
savedSquareY2 = layer.getTileY(marker.y);
|
||||
flipFlag = true;
|
||||
timeCheck = game.time.now;
|
||||
}
|
||||
}
|
||||
flipFlag = true;
|
||||
timeCheck = game.time.now;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
savedSquareX1 = layer.getTileX(marker.x);
|
||||
savedSquareY1 = layer.getTileY(marker.y);
|
||||
square1Num = currentNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
square1Num = currentNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function flipOver() {
|
||||
|
||||
|
||||
map.putTile(currentNum, layer.getTileX(marker.x), layer.getTileY(marker.y));
|
||||
}
|
||||
|
||||
|
||||
function flipBack() {
|
||||
|
||||
|
||||
flipFlag = false;
|
||||
|
||||
|
||||
map.putTile(tileBack, savedSquareX1, savedSquareY1);
|
||||
map.putTile(tileBack, savedSquareX2, savedSquareY2);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function randomizeTiles() {
|
||||
|
||||
for (num = 1; num <= 18; num++)
|
||||
{
|
||||
startList.push(num);
|
||||
}
|
||||
|
||||
for (num = 1; num <= 18; num++)
|
||||
{
|
||||
startList.push(num);
|
||||
|
@ -172,24 +170,24 @@ function randomizeTiles() {
|
|||
|
||||
// for debugging
|
||||
myString1 = startList.toString();
|
||||
|
||||
|
||||
// randomize squareList
|
||||
for (i = 1; i <= 36; i++)
|
||||
for (i = 1; i <=36; i++)
|
||||
{
|
||||
randomPosition = game.rnd.integerInRange(0, startList.length);
|
||||
|
||||
thisNumber = startList[randomPosition];
|
||||
|
||||
randomPosition = game.rnd.integerInRange(0,startList.length);
|
||||
|
||||
thisNumber = startList[ randomPosition ];
|
||||
|
||||
squareList.push(thisNumber);
|
||||
|
||||
|
||||
a = startList.indexOf(thisNumber);
|
||||
|
||||
startList.splice(a, 1);
|
||||
|
||||
startList.splice( a, 1);
|
||||
}
|
||||
|
||||
|
||||
// for debugging
|
||||
myString2 = squareList.toString();
|
||||
|
||||
|
||||
for (col = 0; col < 6; col++)
|
||||
{
|
||||
for (row = 0; row < 6; row++)
|
||||
|
@ -200,8 +198,8 @@ function randomizeTiles() {
|
|||
}
|
||||
|
||||
function getHiddenTile() {
|
||||
|
||||
thisTile = squareList[currentTilePosition - 1];
|
||||
|
||||
thisTile = squareList[currentTilePosition-1];
|
||||
return thisTile;
|
||||
}
|
||||
|
||||
|
@ -211,7 +209,13 @@ function render() {
|
|||
game.debug.renderText(youWin, 620, 240, 'rgb(0,255,0)');
|
||||
|
||||
game.debug.renderText('Time: ' + myCountdownSeconds, 620, 15, 'rgb(0,255,0)');
|
||||
|
||||
//game.debug.renderText('squareCounter: ' + squareCounter, 620, 272, 'rgb(0,0,255)');
|
||||
game.debug.renderText('Matched Pairs: ' + masterCounter, 620, 304, 'rgb(0,0,255)');
|
||||
|
||||
//game.debug.renderText('startList: ' + myString1, 620, 208, 'rgb(255,0,0)');
|
||||
//game.debug.renderText('squareList: ' + myString2, 620, 240, 'rgb(255,0,0)');
|
||||
|
||||
game.debug.renderText('Tile: ' + map.getTile(layer.getTileX(marker.x), layer.getTileY(marker.y)), 620, 48, 'rgb(255,0,0)');
|
||||
|
||||
game.debug.renderText('LayerX: ' + layer.getTileX(marker.x), 620, 80, 'rgb(255,0,0)');
|
||||
|
@ -219,5 +223,4 @@ function render() {
|
|||
|
||||
game.debug.renderText('Tile Position: ' + currentTilePosition, 620, 144, 'rgb(255,0,0)');
|
||||
game.debug.renderText('Hidden Tile: ' + getHiddenTile(), 620, 176, 'rgb(255,0,0)');
|
||||
|
||||
}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
|
||||
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
var game = new Phaser.Game(800, 600, Phaser.WEBGL, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
function preload() {
|
||||
|
||||
|
|
|
@ -41,6 +41,13 @@ function create() {
|
|||
var text2 = game.add.bitmapText(200, 500, 'desyrel', 'camera fixies', 32);
|
||||
text2.fixedToCamera = true;
|
||||
|
||||
// Test fixing a Graphics object to the Camera
|
||||
var graphics = game.add.graphics(0, 0);
|
||||
graphics.fixedToCamera = true;
|
||||
graphics.beginFill(0xFF3300);
|
||||
graphics.lineStyle(2, 0x0000FF, 1);
|
||||
graphics.drawRect(50, 250, 100, 100);
|
||||
|
||||
// Button! do mouse events still work then?
|
||||
|
||||
game.camera.follow(mushroom);
|
||||
|
|
119
examples/wip/index2.php
Normal file
119
examples/wip/index2.php
Normal file
|
@ -0,0 +1,119 @@
|
|||
<?php
|
||||
// Global
|
||||
$files = dirToArray(dirname(__FILE__));
|
||||
$total = 0;
|
||||
|
||||
foreach ($files as $key => $value)
|
||||
{
|
||||
if (is_array($value) && count($value) > 0)
|
||||
{
|
||||
$total += count($value);
|
||||
}
|
||||
}
|
||||
|
||||
function getFile() {
|
||||
|
||||
global $files, $dir, $filename, $title, $code;
|
||||
|
||||
if (isset($_GET['d']) && isset($_GET['f']))
|
||||
{
|
||||
$dir = urldecode($_GET['d']);
|
||||
$filename = urldecode($_GET['d']) . '/' . urldecode($_GET['f']);
|
||||
$title = urldecode($_GET['t']);
|
||||
|
||||
if (file_exists($filename))
|
||||
{
|
||||
$code = file_get_contents($filename);
|
||||
$files = dirToArray($dir);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function dirToArray($dir) {
|
||||
|
||||
$ignore = array('.', '..', '_site', 'assets', 'gfx', 'states', 'book', 'filters', 'misc');
|
||||
$result = array();
|
||||
$root = scandir($dir);
|
||||
$dirs = array_diff($root, $ignore);
|
||||
|
||||
foreach ($dirs as $key => $value)
|
||||
{
|
||||
if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
|
||||
{
|
||||
$result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (substr($value, -3) == '.js')
|
||||
{
|
||||
$result[] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
function printJSLinks($dir, $files) {
|
||||
|
||||
$output = "";
|
||||
|
||||
foreach ($files as $key => $value)
|
||||
{
|
||||
$value2 = substr($value, 0, -3);
|
||||
$file = urlencode($value);
|
||||
|
||||
$output .= "<a href=\"wip/index.php?f=$file\">$value2</a><br />";
|
||||
}
|
||||
|
||||
return $output;
|
||||
|
||||
}
|
||||
?>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="initial-scale=1 maximum-scale=1 user-scalable=0 minimal-ui" />
|
||||
<title>phaser</title>
|
||||
<base href="../" />
|
||||
<script src="_site/js/jquery-2.0.3.min.js" type="text/javascript"></script>
|
||||
<script src="../build/phaser.js" type="text/javascript"></script>
|
||||
<?php
|
||||
if (isset($_GET['f']))
|
||||
{
|
||||
$f = $_GET['f'];
|
||||
?>
|
||||
<script src="wip/<?php echo $f?>" type="text/javascript"></script>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: Arial;
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="phaser-example"></div>
|
||||
|
||||
<input type="button" id="step" value="step" />
|
||||
<input type="button" id="start" value="start" style="margin-left: 32px" />
|
||||
|
||||
<div style="padding: 32px">
|
||||
|
||||
<h2>work in progress examples</h2>
|
||||
|
||||
<?php
|
||||
echo printJSLinks('wip', $files);
|
||||
?>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
57
examples/wip/keyboard.js
Normal file
57
examples/wip/keyboard.js
Normal file
|
@ -0,0 +1,57 @@
|
|||
|
||||
// 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.WEBGL, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
function preload() {
|
||||
|
||||
game.load.image('ship', 'assets/sprites/thrust_ship2.png');
|
||||
|
||||
}
|
||||
|
||||
var ship;
|
||||
var cursors;
|
||||
|
||||
function create() {
|
||||
|
||||
game.stage.backgroundColor = '#2d2d2d';
|
||||
|
||||
ship = game.add.sprite(200, 200, 'ship');
|
||||
ship.physicsEnabled = true;
|
||||
// We do this because our ship is shaped like a triangle, not a square :)
|
||||
ship.body.addPolygon({}, 29, 23 , 0, 23 , 14, 1);
|
||||
|
||||
cursors = game.input.keyboard.createCursorKeys();
|
||||
|
||||
}
|
||||
|
||||
function update() {
|
||||
|
||||
if (cursors.left.isDown)
|
||||
{
|
||||
ship.body.rotateLeft(100);
|
||||
}
|
||||
else if (cursors.right.isDown)
|
||||
{
|
||||
ship.body.rotateRight(100);
|
||||
}
|
||||
else
|
||||
{
|
||||
ship.body.setZeroRotation();
|
||||
}
|
||||
|
||||
if (cursors.up.isDown)
|
||||
{
|
||||
ship.body.thrust(400);
|
||||
}
|
||||
else if (cursors.down.isDown)
|
||||
{
|
||||
ship.body.reverse(400);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function render() {
|
||||
|
||||
game.debug.renderPhysicsBody(ship.body);
|
||||
|
||||
}
|
|
@ -21,6 +21,7 @@ BasicGame.Boot.prototype = {
|
|||
|
||||
create: function () {
|
||||
|
||||
console.log('Boot create');
|
||||
this.game.state.start('Preloader', true, false, this.a, this.b);
|
||||
|
||||
}
|
||||
|
@ -48,6 +49,7 @@ BasicGame.Preloader.prototype = {
|
|||
|
||||
create: function () {
|
||||
|
||||
console.log('Preloader create');
|
||||
this.game.state.start('MainMenu', true, false, this.a, this.b);
|
||||
|
||||
}
|
||||
|
@ -89,4 +91,4 @@ game.state.add('Boot', BasicGame.Boot);
|
|||
game.state.add('Preloader', BasicGame.Preloader);
|
||||
game.state.add('MainMenu', BasicGame.MainMenu);
|
||||
|
||||
game.state.start('Boot');
|
||||
game.state.start('Boot', true, false, 'hello', 'world');
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
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.AUTO, '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 });
|
||||
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
function preload() {
|
||||
|
||||
|
@ -36,7 +36,7 @@ function create() {
|
|||
|
||||
layer = map.createLayer('Tile Layer 1');
|
||||
|
||||
layer.resizeWorld();
|
||||
// layer.resizeWorld();
|
||||
|
||||
map.setCollisionBetween(1, 12);
|
||||
|
||||
|
|
|
@ -141,13 +141,12 @@ Phaser.StateManager.prototype = {
|
|||
if (typeof this._pendingState === 'string')
|
||||
{
|
||||
// State was already added, so just start it
|
||||
this.start(this._pendingState, false, false);
|
||||
// this.start(this._pendingState, false, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.add('default', this._pendingState, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -251,12 +250,6 @@ Phaser.StateManager.prototype = {
|
|||
{
|
||||
this._args = Array.prototype.splice.call(arguments, 3);
|
||||
}
|
||||
|
||||
// Already got a state running?
|
||||
if (this.current)
|
||||
{
|
||||
this.onShutDownCallback.call(this.callbackContext, this.game);
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
@ -307,7 +300,6 @@ Phaser.StateManager.prototype = {
|
|||
if (this.game.load.totalQueuedFiles() === 0)
|
||||
{
|
||||
this.loadComplete();
|
||||
// this.game.loadComplete();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -319,10 +311,12 @@ Phaser.StateManager.prototype = {
|
|||
{
|
||||
// No init? Then there was nothing to load either
|
||||
this.loadComplete();
|
||||
// this.game.loadComplete();
|
||||
}
|
||||
|
||||
this._pendingState = null;
|
||||
if (this.current === this._pendingState)
|
||||
{
|
||||
this._pendingState = null;
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
|
|
@ -669,7 +669,8 @@ Phaser.TilemapLayer.prototype.render = function () {
|
|||
// Only needed if running in WebGL, otherwise this array will never get cleared down I don't think!
|
||||
if (this.game.renderType === Phaser.WEBGL)
|
||||
{
|
||||
PIXI.texturesToUpdate.push(this.baseTexture);
|
||||
// PIXI.updateWebGLTexture(this.baseTexture, renderSession.gl);
|
||||
PIXI.updateWebGLTexture(this.baseTexture, this.game.renderer.gl);
|
||||
}
|
||||
|
||||
this.dirty = false;
|
||||
|
|
Loading…
Reference in a new issue