mirror of
https://github.com/wassname/phaser.git
synced 2026-07-05 17:30:19 +08:00
Nearly fixed the tilemap / body issue. More tests needed but then can push to master.
This commit is contained in:
@@ -44,6 +44,7 @@ Version 1.1.2
|
||||
* Fixed issue 136 - distanceTo using worldX/Y instead of x/y.
|
||||
* Added init method to plugins, to be called as they are added to the PluginManager (thanks beeglebug)
|
||||
* If you pause an Animation, when you next play it it'll resume (un-pause itself).
|
||||
* Started work on fixing the body / camera / tilemap issue - pretty much sorted now I think, more tests needed.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,60 +1,72 @@
|
||||
|
||||
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
var baddie;
|
||||
var keys = Phaser.Keyboard;
|
||||
|
||||
function preload() {
|
||||
|
||||
game.load.image('background','assets/misc/starfield.jpg');
|
||||
game.load.image('ufo','assets/sprites/ufo.png');
|
||||
game.load.image('baddie','assets/sprites/space-baddie.png');
|
||||
game.load.image('ufo','assets/sprites/space-baddie.png');
|
||||
game.load.image('player','assets/sprites/phaser-dude.png');
|
||||
|
||||
}
|
||||
|
||||
var player;
|
||||
var fixed;
|
||||
var cursors;
|
||||
|
||||
function create() {
|
||||
|
||||
game.add.tileSprite(0, 0, 2000, 2000, 'background');
|
||||
|
||||
game.world.setBounds(0, 0, 1400,1400);
|
||||
game.world.setBounds(0, 0, 1400, 1400);
|
||||
|
||||
for (var i = 0; i < 10; i++)
|
||||
for (var i = 0; i < 100; i++)
|
||||
{
|
||||
game.add.sprite(game.world.randomX, game.world.randomY, 'ufo');
|
||||
}
|
||||
|
||||
baddie = game.add.sprite(150, 320, 'baddie');
|
||||
fixed = game.add.sprite(300, 320, 'player');
|
||||
fixed.fixedToCamera = true;
|
||||
fixed.cameraOffset.x = 300;
|
||||
fixed.cameraOffset.y = 300;
|
||||
|
||||
game.camera.follow(baddie);
|
||||
player = game.add.sprite(150, 320, 'player');
|
||||
|
||||
cursors = game.input.keyboard.createCursorKeys();
|
||||
|
||||
game.camera.follow(player);
|
||||
|
||||
}
|
||||
|
||||
function update() {
|
||||
|
||||
baddie.body.velocity.setTo(0, 0);
|
||||
player.body.velocity.setTo(0, 0);
|
||||
|
||||
if (game.input.keyboard.isDown(keys.LEFT) && !game.input.keyboard.isDown(keys.RIGHT))
|
||||
if (cursors.up.isDown)
|
||||
{
|
||||
baddie.body.velocity.x = -155;
|
||||
player.body.velocity.y = -200;
|
||||
}
|
||||
else if (game.input.keyboard.isDown(keys.RIGHT) && !game.input.keyboard.isDown(keys.LEFT))
|
||||
else if (cursors.down.isDown)
|
||||
{
|
||||
baddie.body.velocity.x = 155;
|
||||
player.body.velocity.y = 200;
|
||||
}
|
||||
else if (game.input.keyboard.isDown(keys.UP) && !game.input.keyboard.isDown(keys.DOWN))
|
||||
|
||||
if (cursors.left.isDown)
|
||||
{
|
||||
baddie.angle = 90;
|
||||
baddie.body.velocity.y = -155;
|
||||
player.body.velocity.x = -200;
|
||||
}
|
||||
else if (game.input.keyboard.isDown(keys.DOWN) && !game.input.keyboard.isDown(keys.UP))
|
||||
else if (cursors.right.isDown)
|
||||
{
|
||||
baddie.angle = 90;
|
||||
baddie.body.velocity.y = 155;
|
||||
player.body.velocity.x = 200;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function render() {
|
||||
|
||||
game.debug.renderCameraInfo(game.camera, 32, 32);
|
||||
game.debug.renderSpriteCoords(player, 32, 200);
|
||||
game.debug.renderSpriteCoords(fixed, 600, 200);
|
||||
|
||||
game.debug.renderSpriteCoords(game.world._container, 32, 400);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
|
||||
var game = new Phaser.Game(800, 600, Phaser.AUTO, 'phaser-example', { preload: preload, create: create, update: update });
|
||||
var game = new Phaser.Game(800, 600, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
|
||||
|
||||
function preload() {
|
||||
game.load.image('mushroom', 'assets/sprites/mushroom2.png');
|
||||
}
|
||||
|
||||
var cursors;
|
||||
|
||||
function create() {
|
||||
|
||||
game.stage.backgroundColor = '#2d2d2d';
|
||||
|
||||
// Make our game world 2000x2000 pixels in size (the default is to match the game size)
|
||||
game.world.setBounds(0,0,2000, 2000);
|
||||
game.world.setBounds(0, 0, 2000, 2000);
|
||||
|
||||
for (var i = 0; i < 50; i++)
|
||||
{
|
||||
var s = game.add.sprite(game.world.randomX, game.world.randomY, 'mushroom');
|
||||
}
|
||||
|
||||
for (var i = 0; i < 50; i++)
|
||||
for (var i = 0; i < 150; i++)
|
||||
{
|
||||
game.add.sprite(game.world.randomX, game.world.randomY, 'mushroom');
|
||||
}
|
||||
|
||||
for (var i = 0; i < 50; i++)
|
||||
{
|
||||
var s = game.add.sprite(game.world.randomX, game.world.randomY, 'mushroom');
|
||||
}
|
||||
cursors = game.input.keyboard.createCursorKeys();
|
||||
|
||||
}
|
||||
|
||||
function update() {
|
||||
|
||||
if (game.input.keyboard.isDown(Phaser.Keyboard.LEFT))
|
||||
{
|
||||
game.camera.x -= 4;
|
||||
}
|
||||
else if (game.input.keyboard.isDown(Phaser.Keyboard.RIGHT))
|
||||
{
|
||||
game.camera.x += 4;
|
||||
}
|
||||
|
||||
if (game.input.keyboard.isDown(Phaser.Keyboard.UP))
|
||||
if (cursors.up.isDown)
|
||||
{
|
||||
game.camera.y -= 4;
|
||||
}
|
||||
else if (game.input.keyboard.isDown(Phaser.Keyboard.DOWN))
|
||||
else if (cursors.down.isDown)
|
||||
{
|
||||
game.camera.y += 4;
|
||||
}
|
||||
|
||||
if (cursors.left.isDown)
|
||||
{
|
||||
game.camera.x -= 4;
|
||||
}
|
||||
else if (cursors.right.isDown)
|
||||
{
|
||||
game.camera.x += 4;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function render() {
|
||||
|
||||
game.debug.renderCameraInfo(game.camera, 32, 32);
|
||||
|
||||
}
|
||||
|
||||
@@ -80,7 +80,7 @@ function particleBurst() {
|
||||
|
||||
function update() {
|
||||
|
||||
// game.physics.collide(sprite, layer);
|
||||
game.physics.collide(sprite, layer);
|
||||
game.physics.collide(emitter, layer);
|
||||
|
||||
sprite.body.velocity.x = 0;
|
||||
@@ -111,7 +111,7 @@ function update() {
|
||||
|
||||
function render() {
|
||||
|
||||
// game.debug.renderSpriteCorners(sprite);
|
||||
game.debug.renderSpriteCorners(sprite);
|
||||
// game.debug.renderSpriteInfo(sprite, 32, 32);
|
||||
game.debug.renderSpriteCoords(sprite, 32, 32);
|
||||
|
||||
|
||||
+2
-9
@@ -195,15 +195,8 @@ Phaser.Camera.prototype = {
|
||||
this.checkBounds();
|
||||
}
|
||||
|
||||
if (this.view.x !== -this.displayObject.position.x)
|
||||
{
|
||||
this.displayObject.position.x = -this.view.x;
|
||||
}
|
||||
|
||||
if (this.view.y !== -this.displayObject.position.y)
|
||||
{
|
||||
this.displayObject.position.y = -this.view.y;
|
||||
}
|
||||
this.displayObject.position.x = -this.view.x;
|
||||
this.displayObject.position.y = -this.view.y;
|
||||
|
||||
},
|
||||
|
||||
|
||||
+17
-14
@@ -306,6 +306,8 @@ Phaser.Sprite = function (game, x, y, key, frame) {
|
||||
* @default
|
||||
*/
|
||||
this.fixedToCamera = false;
|
||||
this.cameraOffset = new Phaser.Point;
|
||||
this.world = new Phaser.Point;
|
||||
|
||||
/**
|
||||
* You can crop the Sprites texture by modifying the crop properties. For example crop.width = 50 would set the Sprite to only render 50px wide.
|
||||
@@ -364,17 +366,19 @@ Phaser.Sprite.prototype.preUpdate = function() {
|
||||
this.renderOrderID = this.game.world.currentRenderOrderID++;
|
||||
}
|
||||
|
||||
this.prevX = this.x;
|
||||
this.prevY = this.y;
|
||||
|
||||
if (this.fixedToCamera)
|
||||
{
|
||||
this.prevX = this.game.camera.view.x + this.x;
|
||||
this.prevY = this.game.camera.view.y + this.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.prevX = this.x;
|
||||
this.prevY = this.y;
|
||||
this.x = this.game.camera.view.x + this.cameraOffset.x;
|
||||
this.y = this.game.camera.view.y + this.cameraOffset.y;
|
||||
// this.prevX = this.game.camera.view.x + this.x;
|
||||
// this.prevY = this.game.camera.view.y + this.y;
|
||||
}
|
||||
|
||||
this.world.setTo(this.game.camera.x + this.worldTransform[2], this.game.camera.y + this.worldTransform[5]);
|
||||
|
||||
this.updateCache();
|
||||
this.updateAnimation();
|
||||
|
||||
@@ -656,8 +660,8 @@ Phaser.Sprite.prototype.postUpdate = function() {
|
||||
|
||||
if (this.fixedToCamera)
|
||||
{
|
||||
this._cache.x = this.game.camera.view.x + this.x;
|
||||
this._cache.y = this.game.camera.view.y + this.y;
|
||||
this._cache.x = this.game.camera.view.x + this.cameraOffset.x;
|
||||
this._cache.y = this.game.camera.view.y + this.cameraOffset.y;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -665,11 +669,10 @@ Phaser.Sprite.prototype.postUpdate = function() {
|
||||
this._cache.y = this.y;
|
||||
}
|
||||
|
||||
if (this.position.x != this._cache.x || this.position.y != this._cache.y)
|
||||
{
|
||||
this.position.x = this._cache.x;
|
||||
this.position.y = this._cache.y;
|
||||
}
|
||||
this.world.setTo(this.game.camera.x + this.worldTransform[2], this.game.camera.y + this.worldTransform[5]);
|
||||
|
||||
this.position.x = this._cache.x;
|
||||
this.position.y = this._cache.y;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -350,13 +350,14 @@ Phaser.Physics.Arcade.Body.prototype = {
|
||||
|
||||
this.embedded = false;
|
||||
|
||||
|
||||
|
||||
this.screenX = (this.sprite.worldTransform[2] - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
this.screenY = (this.sprite.worldTransform[5] - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
|
||||
this.preX = (this.sprite.worldTransform[2] - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
this.preY = (this.sprite.worldTransform[5] - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
// this.preX = (this.sprite.worldTransform[2] - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
// this.preY = (this.sprite.worldTransform[5] - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
|
||||
this.preX = (this.sprite.world.x - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
this.preY = (this.sprite.world.y - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
|
||||
this.preRotation = this.sprite.angle;
|
||||
|
||||
@@ -513,8 +514,10 @@ Phaser.Physics.Arcade.Body.prototype = {
|
||||
|
||||
this.angularVelocity = 0;
|
||||
this.angularAcceleration = 0;
|
||||
this.preX = (this.sprite.worldTransform[2] - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
this.preY = (this.sprite.worldTransform[5] - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
// this.preX = (this.sprite.worldTransform[2] - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
// this.preY = (this.sprite.worldTransform[5] - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
this.preX = (this.sprite.world.x - (this.sprite.anchor.x * this.width)) + this.offset.x;
|
||||
this.preY = (this.sprite.world.y - (this.sprite.anchor.y * this.height)) + this.offset.y;
|
||||
this.preRotation = this.sprite.angle;
|
||||
|
||||
this.x = this.preX;
|
||||
|
||||
+9
-3
@@ -556,15 +556,21 @@ Phaser.Utils.Debug.prototype = {
|
||||
|
||||
this.start(x, y, color);
|
||||
|
||||
this.line(sprite.name);
|
||||
if (sprite.name)
|
||||
{
|
||||
this.line(sprite.name);
|
||||
}
|
||||
|
||||
this.line('x: ' + sprite.x);
|
||||
this.line('y: ' + sprite.y);
|
||||
this.line('pos x: ' + sprite.position.x);
|
||||
this.line('pos y: ' + sprite.position.y);
|
||||
this.line('local x: ' + sprite.localTransform[2]);
|
||||
this.line('local y: ' + sprite.localTransform[5]);
|
||||
this.line('world x: ' + sprite.worldTransform[2]);
|
||||
this.line('world y: ' + sprite.worldTransform[5]);
|
||||
this.line('t x: ' + sprite.worldTransform[2]);
|
||||
this.line('t y: ' + sprite.worldTransform[5]);
|
||||
this.line('world x: ' + sprite.world.x);
|
||||
this.line('world y: ' + sprite.world.y);
|
||||
|
||||
this.stop();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user