+1 vote

I can't found anything about this in internet. Please Provide some simple example that can I use to test it?

in Engine by (13 points)

This sounds like a tough cookie to crack. Do you mean velocity and force with respect to a certain object, body, or reference frame?

2 Answers

–1 vote

I usually only work with 3d physics but I guess this is the same with 2D in godot.

Transforming a 3d vector from global to local space works via the xform and xform_inv from the Node2D (i.e. a RigidBody2D).
https://docs.godotengine.org/en/3.1/classes/class_transform2d.html?highlight=transform2d

To convert a vector (rotation only) from local to global you would use global_translate.basis_xform(someXY).
That is helpful if you have a local force (i.e. rocket thrust "forward") and want to transform this into a global force vector for apply_force. You can also use global_translate.xform if you want to convert not only the rotation but also the local translation to a global value (that can be tricky though because add_force requires a relative offset in global space not a global position).

To your question:
global_translate.basis_xform_inv(someGlobalDirection) should transform a global vector back into local space.
So you can get i.e. the objects local "forward" velocity from a global velocity vector.

by (3,248 points)
–1 vote

Use Vector2.rotated(rotation). Example:

extends RigidBody2D

var thrust_force = 100

func _physics_process(delta):
  var thrust = Input.is_action_pressed("ui_up") as int * thrust_force
  applied_force = thrust * Vector2.UP.rotated(rotation)
by (211 points)
edited by
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.