Telash Posted February 11, 2014 Share Posted February 11, 2014 Hey guys,Is it possible to detect if an object is not moving without relying on velocity? I have a series of 'rocks' falling to the ground, stacked ontop of each other, with a slight bounce to make it seem a little bit more realistic, however I want to trigger another action once that are totally stationary (no longer bouncing) and I am unsure how to proceed.I have tried using '.bound.touching.down' and even a timer, however neither seems to give me the desired results.touching.down activates on the first bounce and the timer, which while being more reliable does happen to fall just short (sometimes the falling sprites are delayed for whatever reason and the timer is activated already, triggering the event early).Does anybody happen to know how I can solve this?Thanks in advance Edit: The reason I am not relying on velocity is because i still require the gravity to be activate on the object. Link to comment Share on other sites More sharing options...
erickalves05 Posted August 6, 2014 Share Posted August 6, 2014 Hi Telash, Any success on this? I'm trying to achieve the same thing as you. Can you point me in some direction? Link to comment Share on other sites More sharing options...
DazZ Posted August 7, 2014 Share Posted August 7, 2014 //check to see if slime isn't in the same position as a few frames ago, otherwise turn around. (i.e stuck on unpushable boxes) slime.checkPos++; if (slime.checkPos > 5){ if (slime.oldPos[0] - slime.body.x < 1 && slime.oldPos[0] - slime.body.x > -1 && slime.oldPos[1] - slime.body.y < 1 && slime.oldPos[1] - slime.body.y > -1){ this.switchDirection(slime); }else{slime.checkPos = 0; slime.oldPos[0] = slime.body.x; slime.oldPos[1] = slime.body.y;} }I recently wrote this into my update function that checks if my slime object has stopped next to a box it can't push, if it hasn't moved 1 pixel in 5 frames is turns around. I think it should work fine but I haven't tested it much, just set oldPos to [x,y] when you create whatever it is you want to check. I haven't looked to see if there is a function in phaser to do this in a cleaner way. Link to comment Share on other sites More sharing options...
lewster32 Posted August 7, 2014 Share Posted August 7, 2014 Yeah, Phaser caches the previous position and provides deltaX and deltaY properties for this kind of situation:if (slime.deltaX === 0 && slime.deltaY === 0) { // slime has not moved since the last frame}However, this is only for the previous frame, and if you want to check if it's not moved over a longer period of time, you'll need to roll your own method for this. Link to comment Share on other sites More sharing options...
Recommended Posts