Tween 是一种常见的补间动画技术,在游戏、UI等各种交互式应用程序中被广泛使用。它的作用是让对象在一段时间内平滑过渡到目标状态,而不是直接突变。
Tween的英文全称是"in-betweening",意为"补中间"。它的原理是通过计算不同时间点之间的插值,生成一系列的中间帧,从而形成流畅的过渡动画效果。
eg.实现 物品朝向移动中的目标转向并移动的效果. 这里应为target_postion在变化, 所以可以使用tween来动态更新物品的rotation.
func process():
var tween = create_tween() // godot 内置方法
tween.tween_method(postion_collect.bind(self.postion, target_postion),0.0,1.0,0.5)
func postion_collect(postion : Vector2, target_postion: Vector2 , percent: float):
#calculate rotate degree and next position logic在0.5秒的周期内, 执行 position_collect方法, 绑定了两个position, 并且percent依次被0.0 → 1.0传值
计算角度
这段godot代码, 目的是计算了物品的start_position要转向player的position的角度, 刚开始我不明白为什么最后向量差计算出来的degree要加上90°
因为 Godot 采用的坐标系统与标准的笛卡儿坐标系统有所不同。
func tween_collect(percent:float, start_position: Vector2):
var player = get_tree().get_first_node_in_group("player") as Node2D
if player == null:
return
global_position = start_position.lerp(player.global_position,percent)
var direct_from_start = player.global_position - start_position
rotation_degrees = rad_to_deg(direct_from_start.angle()) + 90Vector2.lerp(to: Vector2, weight: float),
current_vector.lerp(to) 等效于 result = current_vector + (to - current_vector) * weight
用于在两个向量之间进行线性插值。这个方法有两个参数:
Callable.bind() 是 Godot 中 Callable 类的一个方法,用于创建一个新的 Callable 对象,并将一些参数预先绑定到该 Callable 对象上。当调用这个新的 Callable 对象时,绑定的参数将作为该 Callable 对象的前置参数传递,后面再跟着调用时提供的其他参数。
get_tree().pause = true时, 节点的信号也不会传递. 要设置节点的process mode