一个基础的Sprite左右移动
本节我们实现一个基础的Sprite移动
我们新建一个场景,设置根节点为Node2D,并从文件系统面板拖入Godot每个项目都自带的Godot图标文件,以生成一个Sprite子节点。 | |
---|---|
代码
然后我们为Sprite节点,也就是这里自动命名的Icon节点,添加一个脚本。脚本内容如下:
extends Sprite
var speed = 20.0 # 速度 像素/秒
func _process(delta):
# 通过左右按键返回水平方向上的移动方向
# 普通键盘操控模式下,就只能返回1 或者-1,1表示右,而-1表示左。
var dir_x = Input.get_action_strength("ui_right") - Input.get_action_strength("ui_left")
position.x += dir_x * speed
代码分析
在第2行中,var speed声明了一个变量,名叫speed,并且它被赋初始值20.0,注意这里我们写了20.0而不是20,是因为GDScript的赋值语句会根据你赋值的形式自动判断和设置变量的类型,比如这里简单的赋值20,变量speed的数据类型就被设置为整型,也就是int类型,而如果你赋值20.0,则speed的数据类型就成为了浮点数,float。数据类型的差异在一般情况下不那么重要,但是在涉及一些运算,以及使用一些函数时,就会出现运算精度或其他类型的错误。
在第7行中,get_action_strength()返回按键的力度,是一个0到1之间的数字,它在游戏手柄中可能会返回0到1之间的数字,但在普通键盘上按键时,只会返回0或1,未按键时返回0,按键时返回1。
另外因为X轴正方向向右,因此为了获得x轴上的正确方向,所以必须是右减左。
在键盘操控模式下,就只能返回1 或者-1,1表示右,而-1表示左。
这种写法比另一种单独判断Input.is_action_pressed()的方式要简化的多。这种写法也是一些初学者教程常教授的一种写法。
一种不太推荐的写法
extends Sprite
var speed = 20.0 # 速度 像素/秒
func _process(delta):
var dir_x = 0
if Input.is_action_pressed("ui_right"):
dir_x = 1
if Input.is_action_pressed("ui_left"):
dir_x = -1
position.x += dir_x * speed
一种不太推荐的写法2
如果引入2D向量Vector2的话,就可以写成:
extends Sprite
var speed = 20.0 # 速度 像素/秒
var dir = Vector2.ZERO # 方向
func _physics_process(delta):
dir = Vector2.ZERO
if Input.is_action_pressed("ui_right"): # 右 - X轴正方向 - 1
dir.x = 1
if Input.is_action_pressed("ui_left"): # 左 - X轴反方向 - -1
dir.x = -1
position.x += dir.x * speed
运行效果
以上的3种写法基本效果都是一样的,就是让Sprite可以通过键盘上的左右方向键进行20像素/秒的移动。