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,是为了让"每秒的变化量"在不同帧率下保持一致。
相关推荐
BORN(^-^)2 小时前
《产品经理方法论》阅读笔记
笔记·产品经理
jrlong2 小时前
DataWhale大模型基础与量化微调task4学习笔记(第 2 章:高级微调技术_RLHF 技术详解)
笔记·学习
Darkershadow2 小时前
蓝牙学习之Time Set
python·学习·蓝牙·ble·mesh
傻小胖2 小时前
13.BTC-思考-北大肖臻老师客堂笔记
笔记·区块链
好奇龙猫2 小时前
【日语学习-日语知识点小记-日本語体系構造-JLPT-N2前期阶段-第一阶段(9):単語文法】
学习
AI浩2 小时前
约束模型下的目标检测置信学习
学习·目标检测·目标跟踪
m0_748229993 小时前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
風清掦3 小时前
【江科大STM32学习笔记-04】0.96寸OLED显示屏
笔记·stm32·学习
胡西风_foxww3 小时前
ObsidianAI_学习一个陌生知识领域_建立学习路径和知识库框架_写一本书
人工智能·笔记·学习·知识库·obsidian·notebooklm·写一本书