用你的肩膀在 Scratch 中控制 Pishi
使用你的肩膀倾斜来左右移动 Pishi,接住苹果,躲避甜甜圈,并在时间结束前尽可能获得更多分数。
难度
中级
预计时间
20–35 分钟
扩展
POSENET
📖 你将学到什么
- 如何使用 PoseNet 检测人的身体
- 如何测量左右肩膀之间的角度
- 如何使用身体动作控制 Scratch 精灵
- 如何根据肩膀倾斜程度改变移动速度
- 如何创建具有随机位置和速度的下落物体
- 如何使用共享变量控制计时游戏
PoseNet 可以追踪身体关键点,例如肩膀、肘部、手腕、髋部、膝盖和脚踝。在这个项目中,肩膀之间的角度会控制 Pishi 的水平移动。
🛠️ 构建你的项目
1. 设置 Pishi 和肩膀控制
- score(分数)
- time(时间)
- angle(角度)
- 将 score 设置为 0
- 将 Pishi 移动到 x: 0 y: -130
- 重置计时器
- 继续游戏,直到计时器大于 20
- 如果 angle > 3,将 x 增加 5 + angle
- If angle 如果 angle < -3,将 x 增加 -5 + angle
2. 添加下落的 Apple
- apple speed(苹果速度)
- 将 time 设置为 0
- 重复直到 time = FINISH
- 将 Apple 放置在舞台上方的随机 x 位置
- 显示 Apple
- 将 apple speed 设置为 -10 到 -5 之间的随机值
- 它的 y 坐标小于 -160,或者
- time = FINISH
- score 增加 1
- 播放 Chomp 声音
- 隐藏 Apple
- 将它向下移动,使当前下落结束
3. 添加下落的 Donut
添加一个 Donut 精灵,并创建变量:
- donut speed(甜甜圈速度)
Donut 脚本使用与 Apple 脚本相同的结构。
当绿色旗帜被点击时:
- 将 time 设置为 0
- 重复直到 time = FINISH
- 将 Donut 放置在舞台上方的随机 x 位置
- 显示 Donut
- 将 donut speed 设置为 -10 到 -5 之间的随机值
让 Donut 向下移动,直到:
- 它的 y 坐标小于 -160,或者
- time = FINISH
当 Donut 下落时,检查它是否碰到 Pishi。
当 Donut 碰到 Pishi 时:
- score 减少 1
- 播放 Bite 声音
- 隐藏 Donut
- 将它向下移动,使当前下落结束
与 Apple 相比,主要区别在于速度变量、声音和分数变化。
4. 给 Pishi 喂食
After the timer becomes greater than 20 seconds, the main repeat loop ends.
Then Pishi:
- 将 time 设置为 FINISH
- 说 Time’s up
- 播放 Meow 声音
Apple 和 Donut 脚本都会使用:
- 重复执行,直到 time = FINISH
- 将 time 设置为 FINISH 会让两个下落精灵停止。
The Apple and Donut also set time to 0 when the green flag is clicked.
This prevents either sprite from immediately leaving its loop if it starts before Pishi resets the value from a previous game.
🚀 试试你的项目!
点击绿色旗帜并允许摄像头访问。
然后:
- 站在摄像头可以清楚看到你上半身的位置。
- 保持两个肩膀都可见。
- 抬高一个肩膀并降低另一个肩膀,让 Pishi 移动。
- 倾斜得更大,让 Pishi 移动得更快。
- 接住苹果来增加分数。
- 躲避甜甜圈,避免失去分数。
- 尝试在 20 秒计时结束前获得最高分。
🤖 它是如何工作的?
PoseNet 会检测玩家左右肩膀的位置。
项目按照以下过程运行:
你的肩膀
↓PoseNet 检测两个肩膀关键点
↓
扩展功能测量两个肩膀之间的角度
↓Scratch 使用绝对角度并减去 90
↓结果控制 Pishi 的方向和速度
↓Pishi 接住苹果并躲避甜甜圈
The Apple and Donut sprites repeatedly appear at random horizontal positions and fall from the top of the Stage.
After they are caught or leave the Stage, they return to the top at a new random position.
💡 让它变得更好!
- 抬起双手来启动护盾
使用两个手腕和肩膀的 Y 坐标。当两个手腕都高于对应的肩膀时:
- 启动护盾
- 防止甜甜圈减少分数
- 改变 Pishi 的造型
- 播放强化声音
- 使用单手抬起控制下落物体
检测左手腕或右手腕是否高于对应的肩膀。例如:
- 抬起左手,让甜甜圈减速
- 抬起右手,让苹果减速
- 放下双手,恢复正常速度
- 下蹲躲避飞行障碍物
添加一个在舞台上水平移动的障碍物。使用鼻子或肩膀的 Y 坐标检测玩家何时蹲下。当玩家下蹲时:
- 让 Pishi 短暂缩小
- 让 Pishi 向下移动
- 允许障碍物从头顶经过
- 添加跳跃能力
使用脚踝、膝盖、髋部或肩膀的 Y 坐标检测跳跃。当玩家跳起时:
- 让 Pishi 跳跃
- 收集附近所有苹果
- 躲避地面障碍物
- 启动短暂的分数奖励
- 添加单腿平衡奖励
使用脚踝或膝盖关键点检测是否抬起一条腿。当玩家单腿保持平衡时:
- 苹果获得两分
- 甜甜圈下落速度加快
- 奖励计量条增加
- 创建姿势组合
结合多个 PoseNet 条件来触发特殊动作。例如:
- 双手举起 → 护盾
- 左手举起 → 冻结甜甜圈
- 右手举起 → 吸引苹果
- 下蹲 → 躲避飞行障碍物
- 单腿抬起 → 双倍分数模式
- 双臂向两侧伸展 → 清除所有甜甜圈
🔗 分享你的创作
- 鱼和垃圾
- 星星和小行星
- 健康食品和垃圾食品
- 宝藏和下落的岩石
