godot2D游戏教程系列二(4)

  • 前言:
  • 完成目标
  • 在Godot中实现玩家角色移动的完整过程总结如下:

  • 脚本基础设置

  1. 为玩家场景根节点添加GDScript脚本,继承CharacterBody2D以访问其属性和方法
  2. 创建专用Script文件夹存储脚本文件,清除模板代码仅保留基础声明
  • 输入映射配置
  1. 通过项目设置→输入映射界面创建移动动作(如move_up/down/left/right)
  2. 为每个动作绑定键盘按键(示例使用WASD+方向键组合)
  • 脚本核心逻辑
  1. 变量声明:区分大小写,使用const定义常量(如speed=150),var定义可修改变量
  2. 生命周期函数:实现_physics_process(delta)内置函数,以60FPS物理帧率运行
  3. 输入获取:使用Input.get_vector()方法,传入X/Y轴正负动作名称获取Vector2输入向量
  4. 移动实现:
  • 通过velocity属性控制移动,乘以speed常量放大像素值
  • 使用velocity.lerp()配合acceleration加速度常量实现平滑过渡
  • 加速度需乘以delta保证帧率无关性,实现物理一致性
  • 关键细节
  1. delta参数表示自上帧至今的时间差,用于保证物理计算的时间无关性
  2. lerp函数实现向量平滑插值,避免瞬时速度突变
  3. 常量定义后不可修改,变量可动态调整,Godot支持类型自动推断
  • 该流程完整覆盖了从项目配置到物理移动实现的全部关键步骤,通过GDScript的物理处理函数和输入系统,结合向量运算和插值算法,实现了平滑且帧率无关的2D角色移动控制。
  • 实现过程:
  • 在Godot中,我们可以为节点添加脚本文件来控制其行为。我们选择玩家场景的根节点然后点击左上角的卷轴图标进行添加脚本代码
  • 然后我们会发现这个弹窗。这里语言不变,我们使用这个GDScript语言进行开发。继承使用玩家节点的根节点不用动,这个继承就是我们可以访问CharacterBody2D的所有属性和函数。然后至于文件夹的存储,我们则需要新建一个Script的文件夹存储进去
  • 创建完成之后呢,我们清除掉多余代码只保留最上面的一行代码,我们重新撸码
  • 接着我们来创建一些输入动作,来到左上角的项目-项目设置-进入映射界面,这里是我们创建输入动作的地方
  • 然后我们先添加动作,我们这里先来添加上下左右移动的英文名
  • 然后我们需要为这些动作进行绑定按键,点击动作右边的加号,然后我们咋键盘上敲按键就OK了,我这里是绑定wasd和上下左右方向按键。
  • 绑定好之后我们继续编码,然后注意关于脚本代码中的变量名在godot是严格区分大小写的。我们来新建一个变量,我们这里新建一个2d向量类型的变量来记录水平移动的输入和垂直移动的输入。变量命名是(var/const 变量名 :类型 =值或者不设置初始值),然后打注释的快捷键是ctrl+/。
  • 接着我们使用func关键字了声明一个函数,后面跟着函数名称,当你设置一个以下划线为开头的函数就表明这个其实是一个内置函数。在默认情况下,我们的游戏将以每秒6帧的速度进行运行。引擎在每一帧都会调用这个函数。 这个_physics_process(delta: float) -> void:,delta的浮点数类型的参数是给出了自上一帧以来经过的时间,void关键字表示的没有返回值如果需要有返回值可以设置返回值的类型来替换void
  • 要获取输入,我们使用一个名为input的类,并调用它的getVector函数,这个函数会尝试获取x轴和y轴的输入,然后将数据组合成一个vector2,并返回这个vector2供我们使用。我们需要给它四个参数,前两个是正负X轴的输入动作,后两个是正负Y轴的输入动作。然后godot会自动检测我们创建的动作,所以我们依次填入就好了。
  • 然后现在输入数据已经存储在输入方向里了,接下来让我们实际进行移动角色。在CharacterBody2D具有一个名为velocity的属性,用于决定其移动速度。根据输入方向来更新速度,但是这里速度是按照像素来的太小了,所以我们需要将其乘以一个更大的数
  • 然后上面只是设置了玩家的移动速度,就是动起来的速度,接下来我们需要设置玩家角色的移动
  • 然后我们将这个200进行常量化,来方便控制玩家移动的速度,我们利用const 命名一个speed的速度常量,const关键字将把这个标识符声明为常量。对于常量来说,你不能在脚本中改变它的值。而我们可以随时改变变量的值。另外Godot 可以在我们为变量或常量赋值时自动推断出它的类型,所以我们这里直接赋值了150,godot就会将这个速度常量设置为整数类型
  • 接下来我们修改速度代码,让玩家能够加速和减速。我们需要使用velocity.lerp函数来替换,lerp函数会将当前的vector2逐渐过渡到目标值.我们新建一个accelerate的常量加速度。加速度要乘以 delta,是为了让"每秒的变化量"在不同帧率下保持一致。
相关推荐
开维游戏引擎1 天前
开维游戏引擎实例:飞机大战
游戏开发
SmalBox2 天前
【节点】[LinearBlendSkinning节点]原理解析与实际应用
unity3d·游戏开发·图形学
SmalBox2 天前
【节点】[ComputeDeformation节点]原理解析与实际应用
unity3d·游戏开发·图形学
西岸行者3 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
starlaky3 天前
Django入门笔记
笔记·django
勇气要爆发3 天前
吴恩达《LangChain LLM 应用开发精读笔记》1-Introduction_介绍
笔记·langchain·吴恩达
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
勇气要爆发3 天前
吴恩达《LangChain LLM 应用开发精读笔记》2-Models, Prompts and Parsers 模型、提示和解析器
android·笔记·langchain
别催小唐敲代码4 天前
嵌入式学习路线
学习
qianshanxue114 天前
计算机操作的一些笔记标题
笔记