qmcdump跨平台实现详解:缓冲流式IO与文件夹批处理的工程设计
2026/9/19 15:06:51
零基础也能照做:10 分钟做出“可左右移动+跳跃+收集金币”的 2D 小场景。文章给出节点树、资源占位、脚本模板和导出检查项,直接照抄即可跑通。
Texture为 ColorRect 或导入占位 PNG。Level.tscn └── Node2D (root) ├── TileMap # 地形/平台 ├── Player (CharacterBody2D) │ ├── Sprite2D │ └── CollisionShape2D ├── CoinContainer (Node2D) │ ├── Coin (Area2D) │ │ ├── Sprite2D │ │ └── CollisionShape2D └── UI (CanvasLayer) └── Label说明:用
CanvasLayer做 UI,避免跟场景相机联动;金币用Area2D捕获进入事件。
Level.tscn,Root 选Node2D。CharacterBody2D命名 Player,子节点Sprite2D和CollisionShape2D(矩形即可)。CollisionShape2D尺寸覆盖角色。Area2D命名 Coin,子节点Sprite2D、CollisionShape2D(小圆形)。CanvasLayer→Label,锚点设为左上,文本初始金币:0。extends CharacterBody2D @export var move_speed := 220.0 @export var jump_speed := 420.0 @export var gravity := 1200.0 var velocity_y := 0.0 func _physics_process(delta: float) -> void: var input_dir = Input.get_axis("ui_left", "ui_right") velocity.x = input_dir * move_speed # 重力 if not is_on_floor(): velocity_y += gravity * delta else: velocity_y = 0 if Input.is_action_just_pressed("ui_accept"): velocity_y = -jump_speed velocity.y = velocity_y move_and_slide()动作映射:默认
ui_left/ui_right/ui_accept对应左右方向键和空格,无需额外配置。若要手柄支持,可在 Project Settings → Input Map 再添加。
extends Node2D @onready var player := $Player @onready var coin_container := $CoinContainer @onready var ui_label := $UI/Label var coin_count := 0 var spawn_position := Vector2.ZERO func _ready(): spawn_position = player.global_position for coin in coin_container.get_children(): coin.body_entered.connect(_on_coin_collected.bind(coin)) func _on_coin_collected(body: Node, coin): if body == player: coin.queue_free() coin_count += 1 ui_label.text = "金币:%d" % coin_count func _process(_delta): if player.global_position.y > 1200: player.global_position = spawn_position player.velocity = Vector2.ZERO$UI/Label等必须匹配 Scene 树命名,改名后记得同步。Camera2D设为 Current,限制边界防止露底色。Area2D或CharacterBody2D做巡逻,碰撞玩家后重生。FileAccess保存最高分,或ConfigFile简化结构。resizable取决于需求。CharacterBody2D控制、Area2D收集、CanvasLayerUI、Input Map 默认动作。