extends Node2D ## 关卡生成器:读 data/level_*.gd 的字符串网格,按坐标实例化砖块。 ## 改关卡 = 改 data/ 下的脚本,代码不动。 const BrickScene: PackedScene = preload("res://scenes/brick.tscn") @export var brick_size: Vector2 = Vector2(96, 32) ## 砖块宽高 @export var origin: Vector2 = Vector2(128, 80) ## 网格左上角起始坐标 @export var char_to_hp: Dictionary = { "1": 1, "2": 2, "3": 3, "U": -1, # -1 表示不可破坏 } func load_layout(layout: Array[String]) -> void: # 清空旧砖块 for child in get_children(): child.queue_free() for row in range(layout.size()): var line: String = layout[row] for col in range(line.length()): var ch: String = line[col] if ch == "." or not char_to_hp.has(ch): continue _spawn_brick(col, row, ch) func _spawn_brick(col: int, row: int, ch: String) -> void: var brick: StaticBody2D = BrickScene.instantiate() add_child(brick) brick.position = origin + Vector2(col * brick_size.x, row * brick_size.y) if char_to_hp[ch] == -1: # 不可破坏:直接给个高血量占位(M1 先不细分) brick.max_hp = 9999 brick.points = 0 else: brick.max_hp = char_to_hp[ch] brick.points = brick.max_hp * 100