# 访问 Transform2D 的位置,相当于访问矩阵第三列(like Unity transform.position)
transform.origin # 和直接使用 position 是一回事# 访问 Transform2D 的第一列向量
transform.x
# 访问 Transform2D 的第一列向量的 x 元素
transform.x.x
# 创建矩阵对节点进行变换
var t = Transform2D()# 平移
t.origin = Vector2(350,150)# 旋转
var rot =-0.5# The rotation to apply in radians.
t.x.x = cos(rot)
t.x.y = sin(rot)
t.y.x =-sin(rot)
t.y.y = cos(rot)# Scale
t.x *=2
t.y *=2# 应用变换
transform = t
# 对应不使用矩阵的方式# 平移
position = Vector2(0,200)
translate(Vector2(0,200))# 在原有基础上平移# 旋转
rotation =-0.5
rotate(-0.5)# 在原有基础上旋转# 缩放
scale = Vector2.ONE *2## Transform3D 与 Transform2D 的方法基本相同,主要区别就是多使用了一个 basis# 访问 Transform3D 的第一列向量
transform.basis.x
# 访问 Transform3D 的第一列向量的 x 元素
transform.basis.x.x
Get direction Vector
## forward
transform.x
# 手动计算, 即:将x轴(1, 0)旋转rad度数后的向量
var rad = node.rotation
var forward = Vector2(cos(rad), sin(rad))# 使用 Vector2.rotated(angle) 方法 # 该方法得到指定向量按angle旋转后的向量, 所以
var forward = Vector2.right.rotated(rad)## up, 由于 godot 中正y是朝下,通常需要取负-transform.y
# 手动计算, 即:将y轴(0, 1)旋转rad度数后的向量
var up =-Vector2(-sin(rad), cos(rad))# 或者
var up = Vector2(sin(rad),-cos(rad))# or
var up = Vector2.up.rotated(rad)
Await and Unity Style Coroutine
func coroutine(on_update: Callable, duration:float=1):
var elapse_time =0while elapse_time <1:
elapse_time += get_process_delta_time()/ duration
on_update.call(elapse_time)await get_tree().process_frame # 等待下一帧# normal call - 后续逻辑会在 while loop 执行一次后立刻执行
coroutine(func():print("do coroutine"))# test debug
start
do coroutine
end
do coroutine
do coroutine
...# await call - 后续逻辑会等到 coroutine 执行完成之后才会执行await coroutine(func():print("do coroutine"))# test debug
start
do coroutine
do coroutine
...
end