Session 745 minutes

第7课:增强现实(AR)互动游戏——用手腕动作切水果

Learning objective: 用 AI 姿态检测跟踪玩家手腕,把虚拟刀刃固定在该位置,切开舞台上落下的水果。

Theory & practice

🍉 第7课:制作 AR 忍者切水果游戏

🥷 把手变成虚拟刀刃

本课我们把 AI 姿态检测(Pose Detection) 和摄像头结合起来,制作 AR 忍者切水果游戏。

玩家不需要键盘或鼠标。AI 会跟踪手腕的位置,把手的动作变成一把切水果的虚拟刀刃。

任务: 在时间结束前切尽量多的水果,但要避开炸弹。

🎯 学习目标

完成本课后,你将能够:

  • 用 AI 跟踪手的位置。
  • 用手腕坐标控制角色。
  • 用克隆体制作大量水果。
  • 检测手和物体之间的碰撞。
  • 制定得分、时间和生命的规则。

1. 准备游戏

Mục Trọng Tâm

角色

创建或选择以下角色:

角色作用
刀刃跟随手移动
水果要切的物品
炸弹要避开的危险物品
Mục Trọng Tâm

背景

选择简单的背景,让摄像头画面和角色都容易看清。

创建变量:

text
分数
生命
时间

初始值:

text
当绿旗被点击
将 [分数] 设为 [0]
将 [生命] 设为 [3]
将 [时间] 设为 [60]

2. 开启 AI 姿态检测

添加 Pose Detection 扩展,然后打开摄像头:

text
当绿旗被点击
开启视频,透明度 20%

重复执行
    分析摄像头中的姿态

为了玩得更好:

  • 与摄像头保持适当距离。
  • 让上半身和双臂都在画面中。
  • 选择光线充足的地方。
  • 留出足够的空间安全活动。
⚠️ 不要用力挥手,也不要站在易碎物品旁边。

3. 用手控制刀刃

创建两个变量:

text
手腕_X
手腕_Y

用右手腕控制刀刃:

text
当绿旗被点击
显示

重复执行
    分析摄像头中的姿态

    将 [手腕_X] 设为
        [右手腕的 x 坐标]

    将 [手腕_Y] 设为
        [右手腕的 y 坐标]

    移到 x: [手腕_X] y: [手腕_Y]

现在 刀刃 角色会跟着玩家的手移动。

如果左右方向反了,把 x 坐标变成负数:

text
移到 x: [0 - 手腕_X] y: [手腕_Y]

4. 制作刀光拖尾

为了让刀刃留下一道短短的光痕,我们使用逐渐变淡的克隆体。每个克隆体停在刀刃之前的位置并慢慢消失,在后面形成一道拖尾。

在 刀刃 角色中添加:

text
当绿旗被点击
重复执行
    克隆 自己
    等待 0.03 秒
text
当作为克隆体启动时
重复执行 10 次
    将 [虚像] 特效增加 10
删除此克隆体

重复 10 次后,克隆体完全透明并被删除,所以拖尾不会拖慢游戏。

💡 想要更长的拖尾,可以增加重复次数、减少每次的增加量,例如 重复执行 20 次,每次增加 5。

5. 不断出现水果

用克隆体制作大量水果:

text
当绿旗被点击
隐藏

重复执行
    等待 (在 1 和 2 之间取随机数) 秒
    克隆 自己

6. 切水果和计分

每个克隆体一边向上飞,一边在同一个飞行循环中检测碰撞。这样水果在飞行路线的任何位置都能被切到:

text
当作为克隆体启动时
移到 x: (在 -200 和 200 之间取随机数) y: -170
显示

重复执行直到 <y 坐标 大于 180>
    将 y 坐标增加 8
    右转 10 度

    如果 <碰到 [刀刃]?> 那么
        播放声音 [切开]
        将 [分数] 增加 1
        换成 [切开的水果] 造型
        等待 0.2 秒
        删除此克隆体

    等待 0.03 秒

删除此克隆体

每个水果只计一次分,因为克隆体被切后会立即删除。飞出舞台上边缘的水果也会被删除,避免游戏变慢。

想让水果飞得更自然,可以在每次循环中同时改变 x 和 y 坐标。

不同水果可以有不同分数:

水果分数
苹果1
橙子2
西瓜3

7. 添加炸弹

炸弹和水果一样出现,但会让玩家失去一条生命:

text
当作为克隆体启动时
移到 底部的随机位置
显示

重复执行直到 <y 坐标 大于 180>
    将 y 坐标增加 7
    右转 12 度

    如果 <碰到 [刀刃]?> 那么
        播放声音 [爆炸]
        将 [生命] 增加 -1
        删除此克隆体

在 刀刃 角色中持续检查生命数:

text
当绿旗被点击
重复执行
    如果 <生命 ≤ 0> 那么
        广播 [游戏结束]
        停止 [这个脚本]

条件必须放在 重复执行 循环中。如果只在开始时检查一次,游戏永远不会发现玩家已经没有生命了。

8. 制作倒计时

text
当绿旗被点击
将 [时间] 设为 [60]

重复执行 60 次
    等待 1 秒
    将 [时间] 增加 -1

广播 [游戏结束]

收到游戏结束消息时:

text
当接收到 [游戏结束]
说 (连接 "你的分数:" [分数]) 3 秒
停止全部

9. 完整游戏规则

  1. 1玩家有 60 秒。
  2. 2移动手来控制刀刃。
  3. 3切水果得分。
  4. 4避免碰到炸弹。
  5. 5碰到炸弹失去一条生命。
  6. 6时间用完或生命耗尽时游戏结束。

🧪 项目检查

完成前,请检查:

  • 刀刃正确跟随手腕。
  • 摄像头没有意外翻转。
  • 水果出现在不同位置。
  • 每个水果只计一次分。
  • 碰到炸弹会减少生命。
  • 计时器每秒减少一次。
  • 时间用完或生命耗尽时游戏停止。
  • 点击绿旗可以重新开始游戏。

🧩 升级挑战

选择一个想法继续开发:

  1. 1分数越高,水果飞得越快。
  2. 2添加价值 5 分的金色水果。
  3. 3用双手控制两把刀刃。
  4. 4切中时添加一分为二的特效。
  5. 5制作最高分排行榜。
  6. 6添加开始画面和重玩按钮。

增加难度的例子:

text
如果 <分数 大于 10> 那么
    缩短生成水果的等待时间
    提高飞行速度

✅ 记住

  • 姿态检测能找到手腕的位置。
  • 手腕坐标用来控制刀刃。
  • 克隆体可以在不增加角色的情况下制作很多水果。
  • 碰撞检测用来加分或扣生命。
  • 变量保存分数、生命和时间。
  • 摄像头需要充足的光线,AI 才能稳定跟踪动作。
Mục Trọng Tâm

快问快答

  1. 1用哪个关键点控制刀刃?
  2. 2为什么用克隆体制作水果?
  3. 3怎样让一个水果不被重复计分?
  4. 4什么情况下游戏会结束?

Sẵn sàng kiểm tra kiến thức?

Chuyển sang phòng thi riêng để làm bài, xem kết quả và giải thích.

第2部分能力测评:计算机视觉与 AI 姿态跟踪 →14 questions · 15 minutes