在基本的HTML / Javascript游戏中,当移动我的角色时,我想调整AI移动,使其速度/位置相对于角色而不是画布。我的代码工作正常但仅适用于最后列出的任何键函数。
//Left button
if (37 in keysDown) {
if (robot.x <= 400) {
//this for statement runs
for (var i = 0; i < boxes.length; i++) {
if (boxes[1].x < 0) {
boxes[i].x += robot.speed * modifier;
robot.x = 400;
//this for statement is the problem, doesn't run at all
for (var j = 0; j < cogs.length; j++) {
cogs[j].speedX = cogs[j].prevspeedX + robot.speed;
}
};
};
};
//this runs
robot.x -= robot.speed * modifier;
} else {
for (var j = 0; j < cogs.length; j++) {
cogs[j].speedX = cogs[j].prevspeedX;
}
};
然后整个右键运行,因为它出现在左键之后:
//Right button
if (39 in keysDown) {
if (robot.x >= canvas.width - 400) {
for (var i = 0; i < boxes.length; i++) {
if (boxes[1].x > -3000 + canvas.width) {
boxes[i].x -= robot.speed * modifier;
robot.x = canvas.width - 400;
//this is exactly identical to above, only robot.speed is subtracted
for (var j = 0; j < cogs.length; j++) {
cogs[j].speedX = cogs[j].prevspeedX - robot.speed;
}
};
};
};
robot.x += robot.speed * modifier;
} else {
for (var j = 0; j < cogs.length; j++) {
cogs[j].speedX = cogs[j].prevspeedX;
}
};
据我所知,这不是任何变量或值的问题,因为当我切换右/左功能的顺序时,左边开始工作而右边停止。
完整代码:http://codepen.io/anon/pen/NqxbBX
编辑:澄清一下,问题不在于,当我按下左箭头(37)时,我的代码不起作用,播放器和盒子移动部分都很好。 (keysDown是一个对象而非数组)当玩家向左移动时,只有影响齿轮移动 的部分 无法正常工作。按下右键时运行的几乎完全相同的代码完全按照预期工作...这就是为什么它让我精神恍惚。
我甚至会对可能解决问题的方法进行猜测!
答案 0 :(得分:0)
问题是条件
if (boxes[1].x < 0) {
和强>
if (boxes[1].x > -3000 + canvas.width) {
地板的boxes[1]
)初始x值为0
,因此它不会在左按钮逻辑中推进if条件。
如果你制作if (boxes[1].x <= 0) {
和if (boxes[1].x >= -3000 + canvas.width) {
,它应该可以正常使用。
在左按钮逻辑开关之前放置右键逻辑的原因是因为右键逻辑改变了boxes[1].x
的值以使其满足boxes[1].x < 0
。
答案 1 :(得分:0)
问题并不存在于for
循环中,而是存在于if else
结构中。
当你注意到底部的任何东西运行良好时,你的答案已经接近了,但最重要的是没有。这是因为如果你的top if语句被捕获,那么底部的其他方法会阻止你的cogs移动。做一些类似下面的事情(但仍然有一些错误,请注意),将起作用:
http://codepen.io/anon/pen/ZGQPzw
我注意到的一件事是,如果你的机器人撞到了墙上,即使是#34;盒子,它也会继续加快速度。本身并不是。
顺便说一下,不用分号结束if else
语句也不错,因为它们是不必要的。