第23课:平台跳跃
进度 0/30
🦘
平台跳跃
跳得爽的秘密:重力+起跳速度
📖知识引入
🌍重力:每帧拽你一下
跳跃不是「咻」地上去,而是先给一个向上的速度,然后重力每一帧把它往下拽:升得越来越慢,到顶,再加速落下——完美的抛物线!
🦘起跳=发炮
按下跳跃键那一瞬,给角色一个向上速度(如vy=-12):像发射一枚炮弹。之后松不松手,角色都按抛物线飞完全程。
🧱落地才能再跳
必须站在地面/平台上才允许起跳,否则能无限连跳直接飞出天际。判断「脚底下是不是实地」,是平台游戏最关键的检测。
📐平台=可踩的矩形
平台就是一块块矩形碰撞盒:角色下落时脚部碰到平台顶边->落在上面,速度清零。碰侧面->被挡住,逼你跳过去。
🎚️手感全靠调参
重力0.8还是1.2?起跳-12还是-15?一改,手感天差地别。把「太飘/太沉」的感觉告诉AI,让它帮你二分法调参。
💡
跳跃的真相:一个向上的初速度,被重力一帧帧拽回地面!
🔍一次跳跃的一生
// 平台跳跃的物理核心
let player = { x: 50, y: 300, vy: 0 };
const GRAVITY = 1; // 重力:每帧拽一下
const JUMP = -12; // 起跳初速度
let onGround = true; // 是否站在实地
function update() {
// 左右移动(水平不受重力影响)
if (keys.left) player.x -= 5;
if (keys.right) player.x += 5;
// 空格起跳:只有落地才能跳!
if (keys.space && onGround) {
player.vy = JUMP; // 发射「炮弹」
onGround = false;
}
// 重力:每帧拽一下
player.vy += GRAVITY;
player.y += player.vy;
// 落地检测:脚碰平台顶边
for (let p of platforms) {
if (踩到顶边(player, p)) {
player.y = p.y; // 站上平台
player.vy = 0; // 速度清零
onGround = true; // 可以再跳了
}
}
}起跳速度-12、重力+1时, 角色的y坐标变化:
速度 高度(y越小越高)
-12→🚀 离地!
-11→上升
-10→上升
-9→上升(越来越慢)
-5→还在升
0→⭐ 到达最高点!
+1→开始下落
+5→下落
+10→越掉越快
+12→💥 落地!速度清零
画出来就是一条抛物线:
y │ ╭─╮ │ ╭─╯ ╰─╮ │ ╭─╯ ╰─╮ │ ╭─╯ ╰─ └──────────────────────▶ 时间 起跳 最高点 落地
给AI的启动提示词:
「用网页JS做平台跳跃游戏: 左右方向键移动, 空格跳跃(有重力和抛物线), 画面里有3块高低不同的平台, 从起点跳到右边的旗帜过关, 掉出屏幕底部回到起点。」
🎯小测验
第1题:游戏里跳跃的真实原理是?
第2题:防止玩家「无限连跳飞上天」,关键是?
第3题:角色跳跃「太飘、像月球漫步」,应该?
📝本课知识点
- ✓跳跃=初速度+重力=抛物线
- ✓起跳只在落地时允许
- ✓平台是可踩的矩形碰撞盒
- ✓手感靠参数:重力与起跳速度
- ✓感觉描述给AI帮你调参
第23课完成!继续探索下一课吧 🚀
