+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"):
        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 by (243 points)

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.

Please log in or register to answer this question.

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to webmaster@godotengine.org with your username.