ZRT Posted January 10, 2014 Share Posted January 10, 2014 Hello guys, I recently started playing around with Phaser and I'm loving it so much. I have a question about touching.down and how it actually works. I assume one object has to 'touch' another when you define a collision. But I'm having a trouble getting this to work. I have this code below, and it doesn't seem to work at all. Console logging 'p.body.touching.down' returns false. I have my player sprite loaded on top of a platform. I have their collision set in the update function like most of the tutorials and examples suggest ( game.physics.collide(p, platforms); ). Practically, I've been following examples and figuring it out by myself, but this stucked me a bit. if (cursors.up.isDown && p.body.touching.down) { console.log("JUMP"); p.body.velocity.y = -100; }I can make the 'jump' if I remove && p.body.touching.down, but I can't limit it. P.S. Is there a different approach to getting the player to jump? Thank you! Link to comment Share on other sites More sharing options...
Tarion Posted January 10, 2014 Share Posted January 10, 2014 I guess some more code will help to answer your question. Else others can only guess on possible errors you made. Link to comment Share on other sites More sharing options...
ZRT Posted January 10, 2014 Author Share Posted January 10, 2014 Here's the full code:var game = new Phaser.Game(800, 600, Phaser.CANVAS, '', {preload: preload, create: create, update: update});var p; var cursors;var platforms; function preload() { game.load.image('player','images/player.png'); game.load.image('tile', 'images/tile.png');}function create () { p = game.add.sprite(0, 500, 'player'); p.body.collideWorldBounds = true; platforms = game.add.group(); var ground = platforms.create(0, game.world.height - 50, 'tile'); ground.body.immovable = true; cursors = game.input.keyboard.createCursorKeys();}function update () game.physics.collide(p, platforms); p.body.velocity.x = 0; if (cursors.left.isDown) { console.log("GO LEFT"); p.body.velocity.x = -100; } else if (cursors.right.isDown) { console.log("GO RIGHT"); p.body.velocity.x = 100; } // jump if (cursors.up.isDown && p.body.touching.down) { console.log("JUMP"); p.body.velocity.y = -100; }} Link to comment Share on other sites More sharing options...
Tarion Posted January 10, 2014 Share Posted January 10, 2014 Can see the mistake but you can enable some debug flags and check the collision callback. See the examples here: http://gametest.mobi/phaser/examples/sideview.html Link to comment Share on other sites More sharing options...
ZRT Posted January 11, 2014 Author Share Posted January 11, 2014 I came on the forums after I looked for a solution in the examples and came back unsuccessful. I still can't solve this, so any tips and explanation of the touching method will come in handy. Thanks. Link to comment Share on other sites More sharing options...
jpdev Posted January 12, 2014 Share Posted January 12, 2014 Hi Zrt, here are the modifications I had to make to get the jumping to work: a ) The script wouldn't run at all, because the update() functions is missing it's opening "{" b ) you have not given the player any gravity, so he is not falling down, so he never touches the ground Fix: p.body.gravity.y = 7; ( in the create functions, after p has been initialized) Now the player falls to the ground, the touch variable is true, and presto, you can jump Greetings,JP Link to comment Share on other sites More sharing options...
ZRT Posted January 12, 2014 Author Share Posted January 12, 2014 Thank you, jpdev, will try this! Btw, the bracket in the update() function is fine, it seemed that I accidentally removed it in the post above while I was deleting the comments I have in my actual code. So, as I understand the player needs gravity so he can touch something. Seems logical, thank you. EDIT: It works! Seems I was putting the gravity in the wrong function. Follow up question, does the player object always needs ground that binds to the gravity? Because I just noticed that I can only jump only if I stand on something. Is there a way to make a jump without standing on ground, or platform or whatever? Thank you. Link to comment Share on other sites More sharing options...
jpdev Posted January 12, 2014 Share Posted January 12, 2014 As you wrote in your first post, if you remove the touching-check from the jump code, you can jump when ever. So touching down is not required for jumping. It's up to you, how you want to limit the ability to jump. Take for example the mario games. Normally mario is allwoed to jump when he touches the ground or a platform.Only if you have some special like the cape or a propeller-head or something like that, than you are allowed to jump again while in the air. (often limited to one time while in the air.). To do something like that, you would check touching to reset a jump counter, and when jumping check against that counter. (just an example.) If you tell us what jumping-style you are trying to implement we can probably figure something out here Link to comment Share on other sites More sharing options...
ZRT Posted January 12, 2014 Author Share Posted January 12, 2014 Thank you, that actually clarifies my thoughts. Currently I'm just checking out what Phaser can and can't do (and how to), still not building anything serious yet. Link to comment Share on other sites More sharing options...
Recommended Posts