## 启动画面:公司/游戏商标 + 引擎版权 → 自动跳转主菜单 extends Control const HOLD_SEC: float = 1.8 # 完全显示后停留时长 var _timer: float = 0.0 var _skip_ready: bool = false # 防止首帧立即跳过 func _ready() -> void: SceneManager.fade_in_first() _build_ui() # 延迟一帧后才允许跳过(防止启动时按键残留) call_deferred("_allow_skip") func _allow_skip() -> void: _skip_ready = true func _build_ui() -> void: # 全屏渐变背景 var bg := ColorRect.new() bg.color = Color(0.04, 0.04, 0.09) bg.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) add_child(bg) # 工作室名 var studio := Label.new() studio.text = "LANTERN GAMES" studio.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER studio.vertical_alignment = VERTICAL_ALIGNMENT_CENTER studio.set_anchors_and_offsets_preset(Control.PRESET_CENTER) studio.position.y = -80 studio.add_theme_font_size_override("font_size", 18) studio.modulate = Color(0.7, 0.7, 0.7) add_child(studio) # 游戏标题 var title := Label.new() title.text = "魔法工匠" title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER title.vertical_alignment = VERTICAL_ALIGNMENT_CENTER title.set_anchors_and_offsets_preset(Control.PRESET_CENTER) title.add_theme_font_size_override("font_size", 64) title.modulate = Color(1.0, 0.85, 0.3) add_child(title) # 英文副标题 var sub := Label.new() sub.text = "Arcane Artificer" sub.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER sub.vertical_alignment = VERTICAL_ALIGNMENT_CENTER sub.set_anchors_and_offsets_preset(Control.PRESET_CENTER) sub.position.y = 64 sub.add_theme_font_size_override("font_size", 22) sub.modulate = Color(0.7, 0.75, 1.0) add_child(sub) # 提示 var hint := Label.new() hint.text = tr("SPLASH_SKIP_HINT") hint.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER hint.set_anchors_preset(Control.PRESET_BOTTOM_WIDE) hint.position.y = -40 hint.add_theme_font_size_override("font_size", 13) hint.modulate = Color(0.5, 0.5, 0.5) add_child(hint) # 版权 var copy := Label.new() copy.text = "© 2026 Lantern Games | Powered by Godot 4.6" copy.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER copy.set_anchors_preset(Control.PRESET_BOTTOM_WIDE) copy.position.y = -16 copy.add_theme_font_size_override("font_size", 11) copy.modulate = Color(0.4, 0.4, 0.4) add_child(copy) func _process(delta: float) -> void: _timer += delta if _timer >= HOLD_SEC: _go_to_menu() func _input(event: InputEvent) -> void: if not _skip_ready: return if event.is_action_pressed("ui_accept") or event.is_action_pressed("ui_cancel") \ or (event is InputEventMouseButton and event.pressed): _go_to_menu() func _go_to_menu() -> void: set_process(false) set_process_input(false) SceneManager.goto_main_menu()