+1 vote

I am making a 2D platformer. There are some Kinematicbody2d's i want the player to be able to push. I also want the player to slow down when they push the object depending on the object's weight. There is also a function on every phyicsobject class called applyforce, which takes an angle and a speed (i know i should make it a Vector2d, i just haven't wanted to change every time iv'e used it yet) and applies them to the velocity of the object. All of the physics objects use moveandslide. Here is my code in the player script:

``````for i in get_slide_count():
var collision = get_slide_collision(i)
if collision.collider.is_in_group("Pushable"):
collision.collider.apply_force(velocity.angle()+90,velocity.length())
velocity -= Vector2(velocity.length() - collision.collider.weightmuliplier,0).rotated(position.angle_to_point(collision.collider.position))
``````

I didn't expect this to work, but this at least gives you a good idea of what i'm going for. Any ideas?
If it's too complicated to explain in one answer, i'd appreciate a good source to learn from. Iv'e been googling this for a while and haven't found an answer yet.

in Engine

If you want to use physics then you'd normally use `RigidBody`. Perhaps not for the player itself but for the pushed objects. RigidBodies have a Mass/Weight. This would have the advantage that RigidBodies can also push each other but the disadvantage that your code would be inaccurate when pushing two adjacent or stacked up objects.

`apply_force` is only available for RigidBodies (as far as I know). This would be useful for constant forces like gravity, wind or maybe river currents. If you want to "push" a rigidbody then `apply_impulse` is the right method.

My knowledge of Kinematicbodies is limited though. Therefore only a comment.

i said i made an apply_force method myself. I should probably use RigidBody though.

You said? Ok, now I understand "There is" means, you made.

Anyway. You can take RigidBody just be aware that many maybe handy KineticBody methods are missing.