Godot 平台跳跃原型 #1
本文档用于样式演练:含锚点、旁白、折叠、表格、任务清单、代码组、diff 与行高亮等。
跳转到 性能分析 小节。
图 1:原型场景示意
内联样式示例:此处用自定义色强调关键术语,比如 Coyote Time 与 Jump Buffer。
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.0var _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()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(); }}代码重构(Diff)
Section titled “代码重构(Diff)”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 Calls | 100–250 | 包含瓦片地图与 UI |
| 内存 | ~120 MB | 含导入贴图缓存 |
- 基本角色控制
- 缓冲/Coyote Time
- 粒子/屏幕冲击波
- Boss 原型
展开:摄像机抖动与跟随
先用 Camera2D 的 limit 与 offset;后续将引入噪声曲线制造受击抖动。
godot --headless --path ./project --quit-after 2godot --export-release "Windows Desktop" build/game.exe# [!code warning] 如缺少导出模板请先在 Editor 中下载版本/素材
- Godot 4.3,GLES3
- 角色占位图来自开源占位素材包(仅用于原型)