上一节我们实现了一个简单的Sprite水平移动,这一节我们基于上一节的代码,将其扩展为上下左右四个方向的移动。
我们以推荐的get_action_strength写法来编写。
extends Sprite
var speed = 20.0 # 速度 像素/秒
var dir = Vector2.ZERO # 方向
# 每帧执行
func _process(delta):# 帧速率每秒60帧,则每帧为1/60秒,但是实际由于机器渲染效率的问题,每帧的渲染时间是不固定,这个时间就是delta
# 通过输入获取实际的方向
dir.x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
dir.y = Input.get_action_strength("ui_down") - Input.get_action_strength("ui_up")
position += dir.normalized() * speed
代码分析
同样的,在Y轴方向上,由于向下是Y轴正方向,所以我们用下减去上。
这里我们的dir采用了Vector two,Vector two是二维向量,是GDScript的内置类型之一。当然你也可以把它理解为是有两个分量的的复合类型,也就是说除了表示位置和坐标,它可以存储任何相关的两个数字,比如宽度和高度。甚至是你的身高和体重。三维向量Vector three可以类推。
_process()每帧执行一次,每帧的时间间隔大概也就是60分之一秒左右,所以在其中的任何代码,都会每帧执行一次。
在第十一杭,我们赋值Sprite的 position += dir 乘以speed,也就实现了每次按键,Sprite的位置相应的移动dir的方向上speed所设定的20像素的距离。
这里我们还会看到我们给方向向量dir调用了normalized()方法,它的作用是使方向向量归 一 化。也就是变成一个长度为1的向量,这样可以确保Sprite在各个方向上移动时的速度一致。