Godot 免费跨平台游戏引擎 (四、脚本GDScript)
效果如下:
- 制作影子场景:
Sprite作为根节点,在下方添加Tween节点(关键是Tween节点)。Tween用于随进间推移,平滑的修改节点的属性,生成动画。
代码如下:
extends Sprite
onready var tween = $Tween
func start():
#通过tween生成动画:透明度控制,从0.5-0.0
tween.interpolate_property(self,"modulate",Color(1,1,1,0.6),Color(1,1,1,0),0.5,Tween.TRANS_SINE,Tween.EASE_IN)
tween.start()
func _on_Tween_tween_completed(object, key):
queue_free() #注销自己
- 需要用到影子的场景中:
extends Sprite
func _physics_process(delta):
var ghost = preload("res://Ghost.tscn").instance()
ghost.texture = load("res://icon.png")
get_parent().add_child(ghost)
ghost.global_position = global_position
ghost.start()
#这一句实现了精灵跟随鼠标移动
global_position = global_position.linear_interpolate(get_global_mouse_position(),0.2)
Tween示例:
#以使2D节点在两个位置之间平滑移动
var tween = get_node("Tween")
tween.interpolate_property($Node2D, "position",
Vector2(0, 0), Vector2(100, 100), 1,
Tween.TRANS_LINEAR, Tween.EASE_IN_OUT)
tween.start()
enum EaseType:
EASE_IN = 0 插值开始缓慢,然后加速到终点.
EASE_OUT = 1 插值开始快速,然后逐渐减慢.
EASE_IN_OUT = 2 [常量EASE_IN]和[常量EASE_OUT]的组合.两端的插值速度最慢.
EASE_OUT_IN = 3 [常量EASE_IN]和[常量EASE_OUT]的组合.两端的插值速度最快.
enum TransitionType:
TRANS_LINEAR = 0 动画是线性插值的.
TRANS_SINE = 1 使用正弦函数对动画进行插值.
TRANS_QUINT = 2 动画使用五次方(5的幂)函数进行插值.
TRANS_QUART = 3 动画通过四次(至4的幂)函数进行插值.
TRANS_QUAD = 4 动画通过二次函数(以2的幂)插值.
TRANS_EXPO = 5 动画通过指数函数(以x的幂)内插.
TRANS_ELASTIC = 6 动画通过弹性插值,在边缘周围摆动.
TRANS_CUBIC = 7 动画使用三次(至3的幂)函数进行插值.
TRANS_CIRC = 8 动画通过使用平方根的函数进行插值.
TRANS_BOUNCE = 9 通过在结尾处弹跳来插入动画.
TRANS_BACK = 10 动画插补后退.
Node2D节点中,global_position 全局坐标,另外还有global_scale 全局缩放,global_transform 全局变换。
linear_interpolate是对于向量的计算,返回这个向量和b之间线性插值的结果,其数量为t.t在0.0-1.0的范围内,表示内插量。
get_global_mouse_position() 返回鼠标的全局坐标。