跳转到内容
Drug Factory

Godot 平台跳跃原型 #1

本文档用于样式演练:含锚点、旁白、折叠、表格、任务清单、代码组、diff 与行高亮等。

跳转到 性能分析 小节。

像素风平台跳跃示意 图 1:原型场景示意

内联样式示例:此处用自定义色强调关键术语,比如 Coyote TimeJump Buffer

player.gd
extends CharacterBody2D
@export var speed := 220.0
@export var jump_velocity := -420.0
@export var coyote_time := 0.08 # [!code highlight]
@export var jump_buffer := 0.12 # [!code highlight]
var _coyote := 0.0
var _buffer := 0.0
func _physics_process(dt: float) -> void:
var dir := Input.get_axis("move_left", "move_right")
velocity.x = move_toward(velocity.x, dir * speed, 1600.0 * dt)
if is_on_floor():
_coyote = coyote_time # [!code highlight]
else:
_coyote = max(_coyote - dt, 0.0)
if Input.is_action_just_pressed("jump"):
_buffer = jump_buffer # [!code highlight]
else:
_buffer = max(_buffer - dt, 0.0)
if (_coyote > 0.0) and (_buffer > 0.0):
velocity.y = jump_velocity
_buffer = 0.0
velocity.y += 1200.0 * dt # 重力
move_and_slide()
Player.cs
using Godot;
public partial class Player : CharacterBody2D
{
[Export] public float Speed = 220f;
[Export] public float JumpVelocity = -420f;
[Export] public float CoyoteTime = 0.08f; // [!code highlight]
[Export] public float JumpBuffer = 0.12f; // [!code highlight]
private float coyote, buffer;
public override void _PhysicsProcess(double dt)
{
var x = Input.GetAxis("move_left", "move_right");
Velocity = new Vector2(Mathf.MoveToward(Velocity.X, (float)(x * Speed), (float)(1600 * dt)), Velocity.Y);
coyote = IsOnFloor() ? CoyoteTime : Mathf.Max(coyote - (float)dt, 0f);
if (Input.IsActionJustPressed("jump")) buffer = JumpBuffer;
else buffer = Mathf.Max(buffer - (float)dt, 0f);
if (coyote > 0 && buffer > 0)
{
Velocity = new Vector2(Velocity.X, JumpVelocity);
buffer = 0f;
}
Velocity += new Vector2(0, (float)(1200 * dt));
MoveAndSlide();
}
}
将移动与跳跃解耦(player.gd)
velocity.x = move_toward(velocity.x, dir * speed, 1600.0 * dt)
velocity.x = approach(velocity.x, dir * speed, 1600.0 * dt)
func approach(current: float, target: float, delta: float) -> float:
if current < target:
return min(current + delta, target)
return max(current - delta, target)
指标数值(Editor)说明
帧时0.9–1.7 ms空场景 + 角色控制
Draw Calls100–250包含瓦片地图与 UI
内存~120 MB含导入贴图缓存
  • 基本角色控制
  • 缓冲/Coyote Time
  • 粒子/屏幕冲击波
  • Boss 原型

展开:摄像机抖动与跟随 先用 Camera2Dlimitoffset;后续将引入噪声曲线制造受击抖动。

命令行运行 Godot(headless)
godot --headless --path ./project --quit-after 2
导出模板(Windows)
godot --export-release "Windows Desktop" build/game.exe
# [!code warning] 如缺少导出模板请先在 Editor 中下载

版本/素材

  • Godot 4.3,GLES3
  • 角色占位图来自开源占位素材包(仅用于原型)