airPlane 微信小游戏介绍

项目概览
airPlane 是一个基于微信小游戏平台开发的 2D Canvas 飞行射击游戏。玩家驾驶飞机在纵向滚动的战场中躲避敌机、自动射击、收集道具,并在 10 个逐步提升难度的关卡中挑战更高分数。
项目在经典飞机大战玩法的基础上加入了关卡主题、敌机成长、护甲形态、金币掉落、历史战绩、分享复活、性能分级等系统,同时预留了“顶蘑菇”“坦克大战”“弹球”等扩展玩法入口,适合作为微信小游戏学习、迭代和二次开发的样例工程。
基本信息
| 项目项 | 说明 |
|---|---|
| 项目名称 | airPlane |
| 项目类型 | 微信小游戏 |
| 运行方向 | 竖屏 |
| 核心技术 | JavaScript、微信小游戏 API、Canvas 2D |
| 入口文件 | game.js、js/main.js |
| 配置文件 | game.json、project.config.json |
| 资源目录 | images/、audio/ |
核心玩法
玩家进入游戏后控制飞机移动,飞机会按固定节奏自动发射子弹。游戏过程中会不断生成敌机、道具和金币,玩家需要通过走位和火力击毁敌人,避免与敌人或敌方子弹碰撞。
主要玩法目标包括:
- 在 10 个关卡中持续生存并获得更高分数。
- 击毁不同类型敌机,获取分数与金币掉落。
- 收集生命、技能、子弹升级、速度、护甲、无敌等奖励道具。
- 使用炸弹技能清屏,使用无敌技能获得短时间保护。
- 第 10 关达成指定击毁数后触发胜利条件。
关卡与敌人设计
游戏内置 10 个关卡,每关约持续 30 秒,关卡名称如下:
- 风之国度
- 岩之国度
- 雷之国度
- 草之国度
- 水之国度
- 火之国度
- 冰之国度
- 月之国度
- 日之国度
- 最终国度
敌机系统按“10 个关卡 × 5 种类型”配置,共 50 种敌人。不同敌人拥有不同尺寸、速度、分数、移动轨迹与图片资源。随着关卡提升,敌人血量、屏幕敌人上限和整体压迫感都会增加。
敌人类型大致分为:
- 小型敌机:速度快,体型小,适合制造密集压力。
- 中型敌机:速度和体型居中,作为主要战斗单位。
- 大型敌机:体型更大、移动更慢,击毁收益更高。
- Boss 型敌机:分值高,后期可发射敌方子弹。
第 10 关设有胜利目标,玩家需要在最终关累计击毁指定数量敌机。
玩家成长与道具系统
玩家飞机拥有生命、护甲、子弹等级、子弹速度、炸弹技能、无敌技能等成长维度。
道具类型包括:
| 道具 | 效果 |
|---|---|
| 生命 | 增加玩家生命值 |
| 技能 | 增加炸弹技能次数 |
| 双发/子弹 | 提升子弹等级,增强火力覆盖 |
| 加速 | 提升子弹飞行速度 |
| 护甲 | 增加护甲值,并切换飞机外观 |
| 无敌 | 增加无敌技能次数 |
| 随机 | 随机触发一种奖励效果 |
护甲最多 3 层,对应不同飞机图片形态。子弹等级最高可提升到多发散射形态,后期能显著提升清场效率。玩家受到伤害时会优先降低子弹等级,子弹等级不足时才消耗生命。
界面与功能
游戏包含多个 Canvas 绘制页面:
- 标题页:游戏主入口,提供开始、设置、更多游戏、历史战绩等入口。
- 游戏主界面:显示背景、玩家、敌人、子弹、道具、金币、分数、关卡、技能按钮等。
- 设置页:用于配置游戏相关选项。
- 更多游戏页:提供“顶蘑菇”“坦克大战”“弹球”等扩展玩法入口。
- 历史战绩页:展示本地保存的历史成绩。
- 结算页:展示游戏结束、复活分享、重新开始等状态。
游戏结束时会保存分数、关卡、生存时间等历史记录。金币、最高分和历史记录通过微信本地存储保存。
技术架构
项目采用较清晰的模块化组织方式,核心由主循环、全局状态、实体系统、运行时 UI 和基础设施组成。
1.airPlane/
├── game.js # 微信小游戏逻辑入口
├── game.json # 游戏运行配置
├── js/
│ ├── main.js # 主控制器、主循环、事件调度、碰撞与生成逻辑
│ ├── databus.js # 全局状态、关卡、分数、金币、历史记录
│ ├── render.js # Canvas 初始化与屏幕尺寸
│ ├── base/ # 精灵、动画、对象池
│ ├── player/ # 玩家飞机与玩家子弹
│ ├── npc/ # 敌机与敌方子弹
│ ├── runtime/ # 背景、UI、音乐、道具、金币、性能管理
│ ├── games/ # 扩展小游戏模式
│ └── libs/ # 轻量事件库
├── images/ # 图片资源
├── audio/ # 音频资源
└── dev-tools/ # 资源处理与生成脚本
核心运行流程:
game.js加载js/render.js初始化 Canvas。- 创建
Main实例,初始化DataBus、音乐、背景、玩家、UI 等模块。 - 显示标题页,等待玩家选择开始游戏或进入其他页面。
- 游戏开始后进入
requestAnimationFrame主循环。 - 每帧执行状态更新、敌机生成、道具生成、碰撞检测、画面渲染。
- 游戏结束或胜利后保存成绩并显示结算界面。
性能优化设计
项目已经包含多项面向微信小游戏运行环境的性能优化:
- 对象池:复用敌机、子弹、金币、道具对象,降低频繁创建对象带来的 GC 压力。
- 图片缓存:玩家飞机图片和爆炸动画帧进行缓存,避免重复加载。
- 关卡敌人上限:每关配置不同的屏幕敌人最大数量,控制同屏压力。
- 性能分级:根据设备性能调整粒子数量、渲染效果和目标帧率。
- 空间分区方案:提供
spatial-grid碰撞优化模块,用于减少大量对象下的碰撞检测次数。 - 批量更新与统一渲染:主循环集中管理背景、玩家、敌机、子弹、道具、金币和 UI 的绘制顺序。
资源说明
主要资源包括:
images/main/:玩家飞机不同护甲形态图片。images/enemy1/、images/enrmy2/、images/enemy3/、images/enemy4/、images/enrmy5/:不同体型和关卡敌机资源。images/explosion/:爆炸帧动画资源。images/coin_frames/:金币动画帧。images/star_frames/:星星动画帧。audio/bgm.mp3:背景音乐。audio/boom.mp3:爆炸音效。audio/bullet.mp3:射击音效。
运行方式
- 打开微信开发者工具。
- 选择“导入项目”。
- 项目目录选择
1.airPlane。 - 确认
game.json中配置为竖屏小游戏。 - 编译运行,进入标题页后开始游戏。
如果需要调试运行逻辑,可以优先关注以下文件:
js/main.js:游戏整体流程和主循环。js/databus.js:状态、关卡、分数、历史记录。js/player/index.js:玩家移动、射击、技能、护甲。js/npc/enemy.js:敌机配置、移动、掉落、攻击。js/runtime/gameinfo.js:游戏内 UI 和结算显示。
适合扩展的方向
后续可以围绕以下方向继续迭代:
- 完善“顶蘑菇”“坦克大战”“弹球”三个扩展玩法的真实逻辑。
- 增加更多敌方弹幕模式、Boss 阶段和关卡事件。
- 增加金币商店,用金币解锁飞机皮肤或初始道具。
- 接入排行榜、好友排行或云存储。
- 进一步压缩图片和音频资源,降低包体积。
- 将空间分区碰撞检测全面接入主循环。
- 增加自动化性能监控和真机数据统计。
总结
airPlane 是一个功能相对完整的微信小游戏项目。它既保留了经典飞机大战“移动、射击、躲避、成长”的即时反馈,也通过关卡、道具、金币、历史战绩和性能优化系统形成了较好的工程基础。对于继续开发者来说,项目结构清晰、模块边界明确,适合在现有基础上扩展玩法、打磨体验或作为微信小游戏开发示例使用。
评论
发表评论