JakeCake Posted February 16, 2015 Share Posted February 16, 2015 Hi, I have this character that I need to play a walking animation for while on-ground, but a jumping animation when not. I am using "body.onBeginContact()" & "body.onEndContact()" to set a variable "onground" = true/false to choose which animation should play. Since my terrain consist of a bunch of polygon, making for a somewhat edgy ground, my character will needless to say sometime bounce a little bit off the ground, calling these two events very quickly in succession. This happens quite a lot, meaning the player very quickly, just while running along the ground, switches between the two animation modes, which is my first problem. In addition to this problem, there seems to be times when "body.onEndContact()" is called but "body.onBeginContact()" is not called afterwards, so even though the character is standing on the ground he is not considered to be colliding, so I think I need some other function to check for collision as this is erroneous. I am asking anyone here if they have had the same problem and found a good solution. A good solution would in my books be something that can tell if two bodies are touching or have touched within the last few frames or x milliseconds. Pooya72 1 Link to comment Share on other sites More sharing options...
valueerror Posted February 17, 2015 Share Posted February 17, 2015 use the narrophase equations of p2 physics to find out if a collision (downwards) will happen - if so return true (used to find out if player is on ground)combine this with a timer that is set to a time in the future (the current time + 500ms) everytime touchingDown returns false and only change the animation if the current time has reached this point( for example if(game.time.current < timer ){changeAnimation} )function touchingDown(someone) { var yAxis = p2.vec2.fromValues(0, 1); var result = false; for (var i = 0; i < game.physics.p2.world.narrowphase.contactEquations.length; i++) { var c = game.physics.p2.world.narrowphase.contactEquations[i]; // cycles through all the contactEquations until it finds our "someone" if (c.bodyA === someone.body.data || c.bodyB === someone.body.data) { var d = p2.vec2.dot(c.normalA, yAxis); // Normal dot Y-axis if (c.bodyA === someone.body.data) d *= -1; if (d > 0.5) result = true; } } return result;} Link to comment Share on other sites More sharing options...
Recommended Posts