You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
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
|
|
|