愤怒的小鸟类游戏盒子塔碰撞异常:仅底部受影响上层静止
故障原因
- 你当前只把堆叠塔最下方的6个盒子加入了物理引擎世界,上层盒子仅做了绘制逻辑,未接入物理碰撞检测,因此碰撞时只有底层盒子会响应受力。
代码中的双层循环总共会生成18个盒子(6层×3列),但你在i层循环中仅执行了World.add(engine.world, [boxes[i]]),i的取值范围是0~5,仅将boxes数组前6个元素加入了物理世界,其余上层盒子完全不参与物理运算。 - 额外问题:
setupTower函数缺少闭合大括号,会触发语法报错。
修复代码
function setupTower(){ for(var i = 0; i < 6; i++) { for(var j = 0; j < 3; j++) { noStroke(); boxes.push(Bodies.rectangle(900 - j * 90, 540 - i * 90, 80, 80)); colors.push(color(0, random(255), 0)); } } // 所有盒子生成完成后一次性加入物理世界 World.add(engine.world, boxes); } function drawTower(){ push(); for(var i = 0; i < boxes.length; i++){ fill(colors[i]); drawVertices(boxes[i].vertices); } pop(); }
验证效果
修复后所有盒子都接入物理引擎,碰撞时受力会从接触点逐层传导,整个塔体堆叠和碰撞表现都会符合预期。
内容的提问来源于stack exchange,提问作者Che'1093
相关产品推荐
相关产品推荐

