javascript - 无法在 if(isTouching()) 块下设置精灵速度
问题描述
var player = createSprite(320,390,20,20);
var wall1 = createSprite(220,360,210,20);
var wall2 = createSprite(180,300,210,20);
createEdgeSprites();
wall1.velocityX = 2;
wall2.velocityX = -2;
function draw() {
background("white");
if(keyWentDown("space")&&player.velocityY==0){
player.velocityY = -10;
}
player.velocityY += 0.8;
if(keyDown("left")){
player.x-=5;
}
if(keyDown("right")){
player.x+=5;
}
if(player.isTouching(wall1)){
player.velocityX = wall1.velocityX;
console.log("Player velocity: "+player.velocityX);
console.log("Wall1 velocity: "+wall1.velocityX);
}
else{
player.velocityX = 0;
}
if(player.isTouching(wall2)){
player.velocityX = wall2.velocityX;
console.log("Player velocity: "+player.velocityX);
console.log("Wall2 velocity: "+wall2.velocityX);
}
wall1.bounceOff(edges);
wall2.bounceOff(edges);
player.collide(edges);
player.collide(wall1);
player.collide(wall2);
drawSprites();
}
我正在 code.org 的游戏实验室中尝试这个迷宫项目。我希望玩家的移动速度与墙的移动速度相同。控制台中显示的速度指向相同的数字,但我相信 player.collide(wall) 指令导致播放器和墙之间的速度差异。有人可以帮我克服这个问题吗?如果我不提供碰撞选项,我怎样才能让玩家站在墙上并分配与墙相同的速度?
解决方案
问题在于一小段代码:
else {
player.velocityX = 0;
}
那个讨厌的小else
声明是导致这个问题的原因。你看,你的 else 声明说如果player
是感人wall1
的,那么给他们同样的速度。问题是,这else
是不必要的。
该draw()
函数每秒 50 次(我更改了帧速率),每次执行时,它都会检查if
语句是否为真。如果不正确,if
则不执行语句中的代码。else
如果玩家不是,则执行该语句。接触wall1
,包括何时接触wall2
或不接触任何东西。这意味着一旦你每帧降落在wall2(底部)上,引擎。对是否将player
的速度设置为 0 或 的速度感到困惑wall2
,并且出于某种原因,将其设置为 的速度的负数wall2
。删除该语句,它就可以正常工作。
这是经过一些修改的最终项目:
希望这有帮助!
推荐阅读
- javascript - 为什么 findOne({ id }) 在 mongoose 6.012 中无法正常工作
- java - SetShowSoftInputOnFocus(false) 在 Android API 29 中不起作用
- java - reactor + Mockito 存根中的重试机制
- javascript - 如何将复选框状态保存到我的数据库中?
- python - 使用 YAML 编辑 Python(包含长字符串)
- c# - C# Word.Interop Find.Execute MatchWholeWord: true 失败
- c# - 无法再看到完整的 XAML 源
- java - 创建 bean 名称时出错,似乎找不到解决方案
- c# - MailKit Imap“已建立的连接被主机中的软件中止”
- svn - SVN 提交失败但 TortoiseSVN 提交工作