extends Area2D ## 道具:Area2D 每帧下落,被挡板接到时发 collected 信号。 ## 效果由 main.gd 调度(目前只做"加宽挡板")。 signal collected(kind: String) enum Kind { WIDE_PADDLE, MULTI_BALL, SLOW_BALL, EXTRA_LIFE } @export var kind: Kind = Kind.WIDE_PADDLE @export var fall_speed: float = 150.0 @export var kind_color: Dictionary = { Kind.WIDE_PADDLE: Color(0.3, 0.9, 0.4), Kind.MULTI_BALL: Color(0.9, 0.9, 0.3), Kind.SLOW_BALL: Color(0.4, 0.7, 1.0), Kind.EXTRA_LIFE: Color(1.0, 0.4, 0.7), } @onready var visual: ColorRect = $Visual @onready var label: Label = $Visual/Label func _ready() -> void: # 颜色按类型 if kind_color.has(kind): visual.color = kind_color[kind] # 字母标签:W / M / S / L label.text = _label_for(kind) func _physics_process(_delta: float) -> void: position.y += fall_speed * _delta # 掉到底就消失 if position.y > 730: queue_free() func _on_body_entered(body: Node) -> void: if body.is_in_group("paddle"): collected.emit(_kind_name()) queue_free() func _kind_name() -> String: match kind: Kind.WIDE_PADDLE: return "wide_paddle" Kind.MULTI_BALL: return "multi_ball" Kind.SLOW_BALL: return "slow_ball" Kind.EXTRA_LIFE: return "extra_life" return "unknown" func _label_for(k: Kind) -> String: match k: Kind.WIDE_PADDLE: return "W" Kind.MULTI_BALL: return "M" Kind.SLOW_BALL: return "S" Kind.EXTRA_LIFE: return "L" return "?"