Jump to content

Move in sqm way


rhennig
 Share

Recommended Posts

Hello!

 

Im trying to learn Phaser but im stucked with a simple task... Im trying to move a sprite with size of 40x40px in a tilemap from 20 tiles width and 15 tiles height (each tile is 40x40px too), in a "sqm" way (like turn based rpgs), but I have strange results in all my tries...

 

Try 1: Tween.

It works on the first time, and dont execute again... ;(

 

Try 2: Physics.

This guy make my sprite run forever! Tried in diferent ways, but it ever runs forever when the movement start...

 


Try 3: Move with simple sprite.x+=40. (some use in last case... i want to avoid the "jump" movement...)

I dont understand why but it dont move some 1 tile, if each tile is 40px it should move 1 tile right?

 

Any tip to fix one of this? Or another way to move 1 sqm per time?

 

Sorry for bad english... =/

 

Resumed code:

 



var PP = PP || {};

PP.Game = function() {};

var largDes=800;
var altDes=600;
var largBds=200;
var altBds=altDes/2;
var largBdi=200;
var altBdi=altDes/2;
var dTween;
var down;
//tilemap
var map = [[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,2,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0]];
var upd=1;

PP.Game.prototype = {
create : function()
{
//size
this.game.world.setBounds(0,0,800,600);

///////////////////area////////////////////////////////////////////////
this.planet = this.game.make.bitmapData(largDes, altDes);
this.bmdSprite = this.planet.addToWorld(0, 0);
this.planet.ctx.fillStyle = (255,0,0);
this.planet.ctx.fillRect(0, 0, largDes, altDes);

//draw
for(var i=0;i<15;i++)
{
for(var j=0;j<20;j++)
{
this.game.add.sprite(j*40, i*40, 'cenario',mapa[i][j]);
}
}

//create player
this.player = this.game.add.sprite(160, 160, 'player');

dTween = this.game.add.tween(this.player).to({x:this.player.x+40,y:this.player.y},1000, Phaser.Easing.Linear.None, false);

//physic
this.game.physics.arcade.enable(this.player);
this.playerSpeed = 0;
this.game.physics.arcade.setBounds(0,0,largDes,altDes);
this.player.body.collideWorldBounds = true;
this.down=this.player.y+40;
},

update : function()
{
if(this.game.input.activePointer.justPressed()) {
// this.upd=0;
// if(this.upd==0)
// {
//move on the direction of the input
////this.player.body.moves=false;
/////////////PHYSICS TRY!!//////////////////
//this.game.physics.arcade.moveToXY(this.player, this.player.x, this.baixo);
/////////////TWEEN TRY/////////////////////
////dTween.start();
/////////////SIMPLE SPRITE MOVEMENT////////
//this.player.body.x+=40;
//this.player.x+=20;
//update=1;
// }
// this.upd=1;
//this.player.x+=40;
}
}
};


Link to comment
Share on other sites

Hello guys, I'm back to share how i solved my problems (maybe this can be useful for someone :P).

 

Problem 3 - sprite.x+40; dont move 40px

 

After a lot of tries i realized that the problem was that this:

update : function()    {             if(keyboard.left.isDown)         //yep, i changed mouseinput...                      this.player.x+=40;    }

was moving my player 3 times (120px)... I really dont understand why... =/

 
I've included a variable "pressed" and a test (keyboard.left.isUp? to change pressed to false) and... Solved! :) I'm happy for this solution but i really would be glad if anyone explain me what is happening here...
 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Problem 2 - Move player 40 px with physics enabled move him forever!
 
I've added:
this.player.body.moves=true;
before:
this.game.physics.arcade.moveToXY(this.player, this.player.x+40, this.player.y);
and:
this.player.body.moves=false;
Inside a test with the players goal...
 
if(keyboard.left.isUp)        {            pressed=0;                 if(this.player.x==this.newpos)                this.player.body.moves=false;          }if (keyboard.left.isDown && !pressed) {                  pressed=1;                  this.player.body.moves=true;                    this.newpos=this.player.x+40;                  this.game.physics.arcade.moveToXY(this.player, this.player.x+40, this.player.y);}

I dont tried to solve Problem 1 again because this solutions are enought for my needs... ;)

Link to comment
Share on other sites

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...