千里之行,始于足下
零、 笔记
本章实现最简玩家移动功能,非状态机。
一、控制玩家移动
第一步,点击如图标签,将玩家 空闲_前 动画设为默认播放;
第二步,为玩家节点附加 脚本 ,脚本名默认为 玩家1.gd ;
第三步,在 项目->输入映射 中,为上,下,左,右起名;
第四步,绑定键盘键位,点击 【+】 ,为上,下,左,右分别绑定W,S,A,D;
绑定后,在脚本中使用上,下,左,右时,Godot即可知晓表示的是W,S,A,D四个键位。
第五步,为 玩家1 节点编写移动脚本;
extends CharacterBody2D
const 速度 : float = 80.0
func _physics_process(delta: float) -> void:
# 获取键盘输入方向
var 向量 = Input.get_vector("左", "右", "上", "下")
# 计算玩家速度(矢量)
velocity = 速度 * 向量
# 移动
move_and_slide()
第六步,将玩家加入 测试_基本地形 场景,观察玩家移动;
存在多种加入测试_基本地形场景的方式:
-
从文件系统将 玩家1.tscn 直接拖入 测试_基本地形 场景的场景面板。
-
从文件系统将 玩家1.tscn 直接拖入 2D 面板。
-
点击 测试_基本地形 场景的场景选项卡下的 链接 标签,搜索 玩家1 节点后加入。
为了确保场景运行时,玩家处于游戏窗口中心,还应添加相机节点 Camera2D 作为玩家的 子节点 ;
第七步,点击编辑器右上角 【运行当前场景】 按钮进行测试;
键盘输入W,S,A,D测试:1.默认为 空闲_前 动画正确,2.角色受 键盘控制 正确;
二、播放玩家动画
现在开始要为玩家绑定空闲动画与行走动画;
逻辑如下:
下面为 玩家1.gd 脚本具体实现;
extends CharacterBody2D
const 速度 = 80.0
var 玩家方向 : Vector2
@onready var animated_sprite_2d: AnimatedSprite2D = $AnimatedSprite2D
func _physics_process(delta: float) -> void:
var 向量 = Input.get_vector("左", "右", "上", "下")
# 有输入的时候就播放行走动画
if 向量 != Vector2.ZERO:
# 这里区分上下左右各播放什么动画
if 向量.x > 0:
animated_sprite_2d.play("行走_右")
elif 向量.x < 0:
animated_sprite_2d.play("行走_左")
elif 向量.y > 0:
animated_sprite_2d.play("行走_前")
elif 向量.y < 0:
animated_sprite_2d.play("行走_后")
# 记录玩家停止前的朝向
玩家方向 = 向量
# 没有输入的时候就播放空闲动画
else:
if 玩家方向.x > 0:
animated_sprite_2d.play("空闲_右")
elif 玩家方向.x < 0:
animated_sprite_2d.play("空闲_左")
elif 玩家方向.y > 0:
animated_sprite_2d.play("空闲_前")
elif 玩家方向.y < 0:
animated_sprite_2d.play("空闲_后")
velocity = 速度 * 向量
move_and_slide()
三、成品展示
成品如下:
四、免费开源资产包
某开源网站精灵图资源包链接: 点击此处
-
进入链接后点击下图按钮
-
然后点击【No thanks,just take me to the downloads】(不了谢谢,只想下载)
-
最后点击下图按钮完成下载(注意导入前需解压缩)