在Function中跳过嵌套循环

时间:2015-05-12 00:51:11

标签: javascript html5-canvas nested-loops keydown

在基本的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是一个对象而非数组)当玩家向左移动时,只有影响齿轮移动 的部分 无法正常工作。按下右键时运行的几乎完全相同的代码完全按照预期工作...这就是为什么它让我精神恍惚。

我甚至会对可能解决问题的方法进行猜测!

2 个答案:

答案 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语句也不错,因为它们是不必要的。