首页 / 资讯中心 / 文章详情

Godot02-Frogger游戏制作

Godot02-Frogger游戏制作 ★ FEATURED ARTICLE
Godot02-Frogger游戏制作1-视频教程https://www.bilibili.com/video/BV1ugKB66ExJ2-项目仓库地址https://gitee.com/enzoism/godot_game_frogger1-Frogger游戏开发1-创建Game场景类型Node2D-解决图片模糊问题2-创建Player场景类型Node2D-解决图片太小问题3-Player人物挂载脚本gdscript脚本-编写人物移动脚本4-_physics_process 和 _process对比 - _process 不固定取决于当前帧率FPS/ _physics_process固定默认每秒 60 次与帧率无关5-使用键盘控制物物体移动-简单 -Input.is_action_pressed(“right”)6-使用键盘控制物物体移动-通用 -Input.get_vector(“left”, “right”, “up”, “down”)7-XXX1-解决图片模糊问题英文界面中文界面2-解决图片太小问题3-人物移动脚本extends Node2D var direction: Vector2 Vector2(1, 1) var speed: int 5 func _physics_process(_delta: float) - void: position direction * speed4-物体添加动作5-物体添加键盘控制-简单1-选中左侧-FroggerGame类型Node2D2-点击项目设置添加键盘定义3-选中左侧-Player类型Node2D4-创建gdscript脚本-编写人物移动脚本extends Node2D var direction: Vector2 Vector2(1, 1) var speed: int 5 func _physics_process(_delta: float) - void: if Input.is_action_pressed(right): direction Vector2.RIGHT if Input.is_action_pressed(left): direction Vector2.LEFT position direction * speed6-物体添加键盘控制-通用extends CharacterBody2D # 移动方向初始为右下对角线方向每帧会根据输入被覆盖 var direction: Vector2 Vector2(1, 1) # 移动速度像素/秒 var speed: int 200 # 物理帧回调执行频率固定默认 60 次/秒与物理引擎同步 # 移动角色、调用 move_and_slide() 等物理相关操作应放在这里 func _physics_process(_delta: float) - void: # 读取输入返回归一化后的方向向量无输入时为 (0,0)斜向移动不会更快 direction Input.get_vector(left, right, up, down) # 速度 方向 × 速率注意这里没有乘 delta # 因为 move_and_slide() 内部会按物理帧时长处理速度无需手动乘 velocity direction * speed # 执行移动并处理碰撞/滑动内部会更新 position move_and_slide() # 检测确认动作是否在本物理帧刚刚按下只在按下的那一帧触发一次 if Input.is_action_just_pressed(comfirm): print(hello godot)7-人物运行视角-Camera2D添加Camera2D设置视角的边界8-物体碰撞阻挡-刚体StaticBody2D环境静态物场景中不会移动的障碍物CharacterBody2D代码控制角色场景中会移动的角色9-添加背景音乐-AudioStreamPlayer2-知识整理1-_physics_process 和 _process方法的对比在 Godot 中_process和_physics_process的核心区别在于执行频率是否固定以及是否与物理引擎同步。简单说与物理、碰撞相关的逻辑放_physics_process其余常规逐帧更新放_process。核心对比特性_process(delta)_physics_process(delta)执行频率不固定取决于当前帧率FPS固定默认每秒 60 次与帧率无关主要用途常规逐帧更新UI 动画、计时器、非物理的视觉特效等物理相关运算移动带有碰撞体的角色、施加力、射线检测等与物理同步不同步。在单线程游戏中通常在一轮物理步骤之后执行同步。在每一次物理步骤之前执行确保物理状态稳定delta含义自上一帧渲染以来经过的秒数自上一物理步以来经过的秒数通常恒定如何选择使用_physics_process的场景只要你的代码涉及物理引擎的计算就必须用它。例如用move_and_slide()控制CharacterBody2D/3D移动、对RigidBody施加力、或者需要精确检测碰撞的射线查询。因为它的时间步长固定物理模拟的结果才能保持稳定和可复现。使用_process的场景用于那些不需要严格物理同步、且希望尽可能流畅更新的逻辑。例如更新 UI 文本显示、让 2D 精灵做纯粹的视觉旋转不参与碰撞、或者处理输入缓冲如果不需要在物理帧精确响应。关键注意事项无论使用哪个只要涉及基于时间的持续变化如移动、旋转、渐变都必须把变化量乘以delta这样才能保证在不同帧率或物理配置下速度一致。例如position.x speed * delta。2-三种刚体区别在 Godot 中这三个物理节点的核心区别在于控制权归属StaticBody2D由引擎固定不动RigidBody2D由物理引擎全权模拟而CharacterBody2D由你通过代码手动控制移动与碰撞响应。 StaticBody2D环境静态物它不会被物理引擎移动碰撞时自身不发生位移主要用于构建游戏世界的固定环境。典型用途墙壁、地板、平台、障碍物。特殊功能虽然自身不动但可通过constant_linear_velocity属性模拟“移动”让撞上它的物体受到类似传送带或移动平台的力。注意它不响应重力也不会因被推动而改变位置。 CharacterBody2D代码控制角色它不受重力、摩擦力等物理属性自动影响移动完全由你的代码决定。物理引擎只负责在它移动时检测碰撞但不会自动处理碰撞后的滑动或反弹。典型用途玩家角色、敌人、需要精确手感控制的单位。核心方法在_physics_process中调用move_and_slide()自动沿墙滑动适合平台游戏或move_and_collide()立即停止并返回碰撞信息适合子弹反弹等自定义逻辑。注意不要直接设置position否则可能穿墙或绕过碰撞检测。 RigidBody2D全物理模拟体它完全交由物理引擎接管你不应直接设置其位置或速度而应通过施加力如apply_force、apply_impulse来间接影响它。典型用途愤怒的小鸟式弹射物、可堆叠掉落的箱子、受爆炸冲击的碎片。优点碰撞反弹、旋转、重力下落等行为“免费”获得无需写代码。注意直接改position或linear_velocity可能引发异常行为如需安全修改应使用_integrate_forces()回调。 快速选择建议做墙、地面、固定障碍→StaticBody2D做你控制的玩家或 AI 角色→CharacterBody2D做被炸飞、会滚动的箱子→RigidBody2D
阅读完成 · 觉得有帮助?
咨询建站