HOME / 第 7 部分 · 完整游戏项目实战 / 第 93 课
MODULE 7 · 完整游戏项目实战
第 93 课 · 太空射击完整项目(一):游戏框架
🎯 本课学习目标
- 规划完整太空射击游戏
- 搭建游戏框架与场景
- 实现玩家飞船与基础射击
用 3 课做一个「完整可发布」的太空射击游戏,把之前学的技术全部串起来。
📖 详细教学步骤
项目规划设计
太空射击《星域猎手》规划:
- 核心:驾驶飞船射击来袭陨石/敌舰
- 功能:计分、生命、多波敌人、道具(三连发/护盾)、音效、特效、主菜单、存档、排行榜
- 技术:粒子、相机震动、着色器、单例、JSON 存档
项目结构搭建
建立规范结构:
star_hunter/
├── scenes/ main.tscn menu.tscn player.tscn enemy.tscn bullet.tscn ui.tscn
├── scripts/ 对应脚本
├── autoload/ globals.gd audio.gd
├── assets/ images/ audio/ shaders/
└── data/ settings.json单例准备代码
Globals 单例管全局状态:
GDSCRIPTextends Node
var score: int = 0
var best_score: int = 0
var lives: int = 3
var wave: int = 1
func reset_game():
score = 0
lives = 3
wave = 1
func add_score(points: int):
score += points
if score > best_score:
best_score = score
主菜单搭建
- menu.tscn:标题 + 开始/设置/排行榜/退出(第 37 课)
- 背景:滚动的星空(第 95 课做)
- 设为 Main Scene
玩家飞船搭建
- player.tscn:Area2D + 飞船图 + 碰撞 + 尾部粒子
- 移动(左右上下 + 限制边界)
- 自动射击(空格/自动)
- 三连发道具支持
GDSCRIPTextends Area2D
@export var speed: float = 400.0
var triple: bool = false
var fire_timer: float = 0.0
func _physics_process(delta):
var dir = Input.get_vector("move_left", "move_right", "move_up", "move_down")
global_position += dir * speed * delta
clamp_position()
fire_timer -= delta
if Input.is_action_pressed("fire") or auto_fire:
if fire_timer <= 0:
fire_timer = 0.18
shoot()
func shoot():
if triple:
# 三连发
spawn_bullet(Vector2(0, -1))
spawn_bullet(Vector2(-0.3, -1))
spawn_bullet(Vector2(0.3, -1))
else:
spawn_bullet(Vector2(0, -1))
背景滚动星空特效
做滚动星空背景(动态感):
GDSCRIPTextends Node2D
@export var scroll_speed: float = 60.0
@onready var stars = $Stars # 多层精灵
func _process(delta):
# 让星空背景向下滚动
stars.position.y += scroll_speed * delta
if stars.position.y >= 240:
stars.position.y = 0 # 循环
测试框架测试
- 菜单 → 开始 → 进入游戏场景
- 飞船移动、射击、背景滚动
- 下一课加敌人与道具
🎉 框架搭建完成!
⚠️
背景滚动有缝?
星空图上下需无缝循环(或两张图拼接),偏移量取整到图高。
⚠️
飞船飞出屏幕?
clamp_position 用 clampf 限制在视口内。
🧪 动手试一试
🏋️ 课后练习
完成框架:主菜单能进游戏,飞船八方向移动 + 自动射击,滚动星空背景。
第 37 课场景跳转 + 飞船脚本 + 背景循环。
💡
框架先行,功能后补——先让「菜单→游戏」闭环跑通。
💡
Globals 统一管分数/生命,后面所有系统都读它。
🎓 本课小结
太空射击框架:项目规划 + Globals 单例 + 主菜单 + 玩家飞船射击 + 滚动星空背景;「菜单→游戏」闭环打通。