制作一个有趣的射击小游戏:为孩子们准备的Scratch射击游戏

从零开始制作一个完整的2D射击游戏

由 小石头编程 发表于 2026年01月17日 · 阅读量 305
## 👋 项目介绍 欢迎来到射击小游戏制作教程!在这个项目中,我们将一起创建一个充满挑战的2D射击游戏。玩家将控制一个角色在街道场景中移动,使用鼠标瞄准并射击敌人。游戏包含生命值系统、计分机制、不同类型的敌人以及武器特效。通过这个项目,你将学习如何使用变量管理游戏状态,通过克隆体创建动态敌人,以及实现角色间的碰撞检测。准备好开始这场编程冒险了吗? ## 🎯 你将学会 * **变量控制**:使用变量管理玩家生命值、分数和游戏状态 * **消息广播**:通过广播机制实现角色间的协同动作(如射击) * **克隆体技术**:创建多个敌人副本,实现动态游戏场景 * **碰撞检测**:检测角色间的接触并触发相应事件 * **造型切换**:根据角色状态切换不同造型,增强游戏表现力 ## 🛠️ 开始制作 ### 第一步:初始化项目与舞台设置 **目标**:创建新项目并配置游戏背景,为后续角色和代码搭建基础舞台环境。 **操作步骤:** 1. 打开 Scratch 软件,创建一个新项目 2. 点击舞台下方的"背景"选项卡 3. 删除默认的空白背景(操作步骤索引3) 4. 点击"选择背景"按钮,从背景库中添加"streets backdrop"(操作步骤索引1) 5. 继续添加"Path-and-Road-Top-Down-Tileset-Pixel-Art"背景(操作步骤索引4) 6. 添加"Path-and-Road-Top-Down-Tileset-Pixel-Art2"背景(操作步骤索引5) 7. 最后添加"game over"背景(操作步骤索引6),用于游戏结束画面 ![action:1](https://www.codxz.com/media/upload/2026011716405262_screenshot_1.png) ### 第二步:创建全局变量 **目标**:为游戏创建必要的全局变量,用于存储玩家生命值、分数、游戏状态等关键信息。 **操作步骤:** 1. 点击舞台角色,切换到"代码"选项卡 2. 在"变量"类别中,依次创建以下变量: - PLAYER_LIVES(玩家生命值) - ded(死亡状态标志) - Score(游戏分数) - Health(生命值) - shakex(屏幕震动X轴) - shakey(屏幕震动Y轴) - Y POSITION(Y轴位置) - death?(死亡状态) - PMP(玩家移动正值) - PMN(玩家移动负值) - EM1(敌人1移动时间) - EM2(敌人2移动时间) ![action:7](https://www.codxz.com/media/upload/2026011716405262_screenshot_7.png) ### 第三步:添加角色 player **目标**:添加玩家控制角色并设置其基础造型,为后续移动和交互做准备。 **操作步骤:** 1. 点击角色库中的"添加角色"按钮 2. 从角色库中选择"player"角色(操作步骤索引37) 3. 切换到"造型"选项卡,点击"选择造型" 4. 添加"nx"造型,用于玩家向左移动时的显示(操作步骤索引39) ### 第四步:player 基础移动与交互逻辑 **目标**:实现玩家的移动控制、碰撞检测和生命值管理,让玩家角色能够响应键盘操作并与敌人互动。 **操作步骤:** 1. 选择player角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件 3. 设置初始造型为"norm" 4. 创建以下代码块: ```scratch when flag clicked switch costume to (norm v) forever if <(PLAYER_LIVES) = [1]> then if <key [w v] pressed?> then change y by (PMP) end if <key [a v] pressed?> then switch costume to (nx v) change x by (PMN) end if <key [s v] pressed?> then change y by (PMN) end if <key [d v] pressed?> then switch costume to (px v) change x by (PMP) end else if <key [w v] pressed?> then change y by (PMP) end if <key [a v] pressed?> then switch costume to (nx v) change x by (PMN) end if <key [s v] pressed?> then change y by (PMN) end if <key [d v] pressed?> then switch costume to (px v) change x by (PMP) end end end ``` 5. 添加碰撞检测代码: ```scratch when flag clicked show forever if <touching [enemy 1 v]?> then change [PLAYER_LIVES v] by (-1) switch costume to (hit v) wait (0.5) seconds switch costume to (norm v) wait (0.8) seconds end if <touching [enemy 2 v]?> then change [PLAYER_LIVES v] by (-2) wait (0.8) seconds end end ``` 6. 添加生命值检测代码: ```scratch when flag clicked forever if <(PLAYER_LIVES) = [0]> then set [death? v] to [yes] stop [all v] end end ``` **逻辑解析:** 这段代码实现了玩家角色的核心功能。第一部分处理键盘移动控制,使用WASD键控制角色上下左右移动,并根据移动方向切换造型(左移时显示nx造型,右移时显示px造型)。第二部分检测玩家与敌人的碰撞,与enemy 1碰撞损失1点生命值,与enemy 2碰撞损失2点生命值,并触发受伤动画。第三部分实时检测玩家生命值,当生命值为0时设置死亡状态并停止所有脚本。 ![action:59](https://www.codxz.com/media/upload/2026011716405262_screenshot-screenshot_59.png) ### 第五步:添加其他角色与资源 **目标**:添加游戏中的其他重要角色和资源,如生命值条、武器、子弹等。 **操作步骤:** 1. 点击角色库中的"添加角色"按钮 2. 添加"health bar"角色(操作步骤索引194) 3. 添加"best weapon ever"角色(操作步骤索引226) 4. 添加"bullet"角色(操作步骤索引279) 5. 添加"crosshair"角色(操作步骤索引326) 6. 添加"bullet barrier"角色(操作步骤索引349) 7. 添加"enemy 1"角色(操作步骤索引359) 8. 添加"enemy 2"角色(操作步骤索引418) 9. 添加"variable tracker"角色(操作步骤索引515) 10. 添加"Score"角色(操作步骤索引570) ### 第六步:health bar 基础设置 **目标**:配置生命值显示条的造型和位置,使其能够直观展示玩家当前生命值。 **操作步骤:** 1. 选择health bar角色,切换到"造型"选项卡 2. 添加11个不同造型的生命值条(0-10点生命值) 3. 切换到"声音"选项卡,添加"pop"声音(操作步骤索引206) ### 第七步:health bar 交互逻辑 **目标**:实现生命值条的显示逻辑,使其能够根据玩家生命值自动切换对应造型并跟随玩家位置。 **操作步骤:** 1. 选择health bar角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件 3. 设置初始生命值为10点 4. 创建以下代码块: ```scratch when flag clicked set [PLAYER_LIVES v] to [10] forever wait (00) seconds switch costume to ((PLAYER_LIVES) + (1)) go to (player v) change y by (30) end ``` **逻辑解析:** 这段代码初始化玩家生命值为10点,然后在循环中根据PLAYER_LIVES变量的值切换对应的造型(造型编号为生命值+1),并将生命值条定位到玩家角色上方30像素处,实现生命值条跟随玩家的效果。 ![action:217](https://www.codxz.com/media/upload/2026011716405262_screenshot-screenshot_217.png) ### 第八步:best weapon ever 添加与基础设置 **目标**:添加武器角色并配置其基础造型和声音,为射击特效做准备。 **操作步骤:** 1. 选择best weapon ever角色,切换到"造型"选项卡 2. 添加"New Piskel (11)"造型(操作步骤索引228) 3. 添加"shoot"造型(操作步骤索引229) 4. 切换到"声音"选项卡,添加"087926_ar15-40370"声音(操作步骤索引230) ### 第九步:best weapon ever 交互逻辑 **目标**:实现武器的跟随玩家、射击特效和隐藏逻辑。 **操作步骤:** 1. 选择best weapon ever角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件 3. 创建武器跟随玩家的代码: ```scratch when flag clicked forever point towards (鼠标指针 v) go to (player v) change y by (-10) change x by (10) end ``` 4. 添加射击特效代码: ```scratch when I receive [FIRE!!! v] play sound [087926_ar15-40370 v] until done switch costume to (shoot v) switch costume to (stop shoot v) ``` 5. 添加游戏结束时的隐藏逻辑: ```scratch when flag clicked show forever if <(death?) = [yes]> then hide end end ``` ### 第十步:bullet 添加与基础设置 **目标**:添加子弹角色并配置其基础造型和声音,为子弹发射做准备。 **操作步骤:** 1. 选择bullet角色,切换到"造型"选项卡 2. 切换到"声音"选项卡,添加"pop"声音(操作步骤索引281) ### 第十一步:bullet 基础移动与事件响应 **目标**:实现子弹的发射、移动和碰撞检测逻辑。 **操作步骤:** 1. 选择bullet角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件并隐藏角色 3. 创建子弹克隆代码: ```scratch when flag clicked hide forever wait (0.3) seconds create clone of (自己 v) end ``` 4. 添加克隆体行为代码: ```scratch when I start as a clone hide go to (player v) point towards (鼠标指针 v) show broadcast (FIRE!!! v) forever move (10) steps if <<touching [enemy 1 v]?> or <<touching [enemy 2 v]?> or <touching [bullet barrier v]?>>> then wait (0.2) seconds delete this clone end end ``` **逻辑解析:** 这段代码实现了子弹的核心功能。主角色每0.3秒创建一个子弹克隆体。每个克隆体从玩家位置发射,指向鼠标方向,并触发"FIRE!!!"广播。克隆体向前移动,当碰到敌人或障碍物时,等待0.2秒后删除自身。广播"FIRE!!!"同时触发武器特效和准星动画。 ![action:294](https://www.codxz.com/media/upload/2026011716405262_screenshot_294.png) ### 第十二步:crosshair 添加与基础设置 **目标**:添加准星角色并配置其基础造型和声音,为瞄准做准备。 **操作步骤:** 1. 选择crosshair角色,切换到"造型"选项卡 2. 切换到"声音"选项卡,添加"pop"和"Bell Toll"声音(操作步骤索引328-329) ### 第十三步:crosshair 基础移动与事件响应 **目标**:实现准星的跟随鼠标和射击特效逻辑。 **操作步骤:** 1. 选择crosshair角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件 3. 创建准星跟随鼠标的代码: ```scratch when flag clicked forever go to (鼠标指针 v) turn right (3) degrees end ``` 4. 添加射击特效代码: ```scratch when I receive [FIRE!!! v] change size by (10) wait (00) seconds change size by (-10) ``` ### 第十四步:variable tracker 添加与交互逻辑 **目标**:添加变量追踪角色并设置游戏初始化逻辑。 **操作步骤:** 1. 选择variable tracker角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件 3. 创建变量初始化代码: ```scratch when flag clicked set [death? v] to [no] set [Score v] to [0] set [PMN v] to [-2] set [PMP v] to [2] set [EM1 v] to [5] set [EM2 v] to [2] ``` 4. 添加分数显示控制代码: ```scratch when flag clicked forever if <(death?) = [yes]> then hide variable [Score v] end end ``` 5. 添加分数显示恢复代码: ```scratch when flag clicked forever if <(death?) = [no]> then show variable [Score v] end end ``` ### 第十五步:Score 添加与基础设置 **目标**:添加分数显示角色并配置其基础造型。 **操作步骤:** 1. 选择Score角色,切换到"造型"选项卡 2. 切换到"声音"选项卡,添加"pop"声音(操作步骤索引572) ### 第十六步:Score 基础移动与事件响应 **目标**:实现分数显示的定位逻辑。 **操作步骤:** 1. 选择Score角色,切换到"代码"选项卡 2. 添加"当绿旗被点击"事件 3. 创建位置设置代码: ```scratch when flag clicked forever go to x: (-189) y: (162) end ``` ### 第十七步:运行演示与最终截图 **目标**:启动项目并查看最终效果,测试游戏功能。 **操作步骤:** 1. 点击舞台上的绿旗按钮运行项目(操作步骤索引580) 2. 观察游戏运行效果: - 玩家角色可以移动 - 准星跟随鼠标 - 点击鼠标发射子弹 - 敌人会自动生成并向玩家移动 - 生命值条会随玩家生命值变化 - 击中敌人会增加分数 - 生命值为0时显示游戏结束画面 ![action:580](https://www.codxz.com/media/upload/2026011716405262_screenshot_580.png) ## 🚀 挑战一下 尝试扩展这个游戏吧!你可以: 1. 添加更多敌人类型,比如会发射子弹的敌人 2. 设计武器升级系统,随着分数增加武器威力提升 3. 添加道具系统,如生命值恢复道具、护盾道具等 4. 创建多个关卡,增加游戏难度和挑战性 ## 🎉 结语 恭喜你完成了这个射击小游戏的制作!通过这个项目,你学会了Scratch中许多重要的编程概念,包括变量管理、消息广播、克隆技术和碰撞检测。这些技能是你未来创建更复杂游戏的基础。继续探索Scratch的无限可能,发挥你的创造力,制作属于你自己的精彩游戏吧!

项目下载