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,是为了让"每秒的变化量"在不同帧率下保持一致。
相关推荐
SmalBox3 小时前
【节点】[CustomDepthBuffer节点]原理解析与实际应用
unity3d·游戏开发·图形学
羊群智妍5 小时前
2026 AI搜索流量密码:免费GEO监测工具,优化效果看得见
笔记·百度·微信·facebook·新浪微博
阿蒙Amon5 小时前
TypeScript学习-第10章:模块与命名空间
学习·ubuntu·typescript
AI绘画哇哒哒5 小时前
【干货收藏】深度解析AI Agent框架:设计原理+主流选型+项目实操,一站式学习指南
人工智能·学习·ai·程序员·大模型·产品经理·转行
戌中横6 小时前
JavaScript——预解析
前端·javascript·学习
●VON7 小时前
React Native for OpenHarmony:2048 小游戏的开发与跨平台适配实践
javascript·学习·react native·react.js·von
山岚的运维笔记7 小时前
SQL Server笔记 -- 第18章:Views
数据库·笔记·sql·microsoft·sqlserver
ZH15455891317 小时前
Flutter for OpenHarmony Python学习助手实战:自动化脚本开发的实现
python·学习·flutter
xcLeigh7 小时前
Python入门:Python3 requests模块全面学习教程
开发语言·python·学习·模块·python3·requests
xcLeigh7 小时前
Python入门:Python3 statistics模块全面学习教程
开发语言·python·学习·模块·python3·statistics