askariwa 1 Report post Posted May 2, 2015 I am trying to create a little game but i have this problem (for now ) : At the "create" state i define this.collisionCircle = new Phaser.Circle(0,0,2);this.playerRectangle = new Phaser.Rectangle (0,0,0,0);this.player = game.add.sprite(game.world.centerX, game.world.height-80,'player');game.physics.arcade.enable(this.player);this.player.body.drag.set(550);this.circleCenter = new Phaser.Point(0,0);this.PointToGo = new Phaser.Point(0,0);At the "update" step i havecollisionCircle.setTo(mycircle.center_x,mycircle.center_y,50);if ((Phaser.Circle.intersectsRectangle(collisionCircle,playerRectangle)) && (touchesPlayerAlready==false)){ touchesPlayerAlready=true; circleCenter.setTo(mycircle.center_x,mycircle.center_y); PointToGo=Phaser.Point.rotate(circleCenter, playerRectangle.centerX, playerRectangle.centerY, 180, true); game.physics.arcade.accelerateToXY(player,PointToGo.x,PointToGo.y,20)} What i am trying to do is using the circular sprite to "push" the player sprite.I define the coordinates of PointToGo as the diametrically opposite point of the circle center using the player sprite coordinates as the middle point of the rotation.My problem is that, even setting the Drag property of player, the player sprite after the first intersection with the circular sprite does not decreases it's velocity but it always ends it's movement at the "borders" of the game (defined with a tilemap).What i want to do is simulate a real-life push, something that at the beginning has an acceleration, caused by a force, but needs to have a deceleration of it's velocity caused by friction.Maybe i am doing it wrong here by using the accelerateToXY method but i cannot find something like applyForce in arcade physics.Can anyone help me with this ? 1 gingerbeardman reacted to this Quote Share this post Link to post Share on other sites
MichaelD 84 Report post Posted May 3, 2015 Have you tried applying the property Mass to the body of the sprites? Because as stated in the docs: The mass of the Body. When two bodies collide their mass is used in the calculation to determine the exchange of velocity. http://phaser.io/docs/2.3.0/Phaser.Physics.Arcade.Body.html#mass Which sounds like the thing you want to achieve. 1 askariwa reacted to this Quote Share this post Link to post Share on other sites
askariwa 1 Report post Posted May 3, 2015 Have you tried applying the property Mass to the body of the sprites? Because as stated in the docs: http://phaser.io/docs/2.3.0/Phaser.Physics.Arcade.Body.html#mass Which sounds like the thing you want to achieve. I really thank you for your help but i think i cannot use the mass property because i don't have a "body" for the circular sprite (since arcade physics don't handle circular bodies).I know that using the arcade physics lib for this seems wrong but using the p2 lib would create me more problems with the rest of the game any more help ? Quote Share this post Link to post Share on other sites
drhayes 337 Report post Posted May 4, 2015 The last three params to game.physics.arcade.collide are the collide callback, the process callback, then the context for both the callbacks. If you return true from the process callback then the collision callback will be called and you can do whatever you need to do. You should try running your circle collision check in the process callback for your sprites, see if that works for you. 1 askariwa reacted to this Quote Share this post Link to post Share on other sites
askariwa 1 Report post Posted May 4, 2015 Thank you drhayes but my problem is not the collision checking part but passing a bit of the kinetic energy of the circular spite to the player sprite.Using the accelerateToXY method helps me indicate the correct vector of the force applied during the collision but the player sprite but i know that i'm setting an acceleration instead of an force. Isn't any way at all defining a force in arcade physics ? Quote Share this post Link to post Share on other sites
ForgeableSum 102 Report post Posted May 5, 2015 I recommend decelerating the object manually. Set a timer and subtract velocity.x and velocity.y incrementally over a period of time. 2 Dread Knight and askariwa reacted to this Quote Share this post Link to post Share on other sites