javascript逐渐减速(左)

时间:2016-07-04 05:05:27

标签: javascript

我有一个程序,如果用户按住左箭头键或右箭头键,角色会逐渐加速,最终达到最大速度。释放键时,角色逐渐减慢,直至完全停止。

我的右箭头键很好,但左边坏了。我的左箭头键加速很好,但是当释放键时,角色直接移回到按下左键之前开始的位置。 (可能比它开始时更远)

我知道为什么会这样,但我试图修复它(失败)并且我不想进一步填写我的程序。

这是我的代码:

var maxSpeed = 15;
var xForce = 0;
var kingXPos = 10;
var kingYPos = 200;

var draw = function () {
  background(255, 0, 0);
  image(getImage("creatures/Winston"), kingXPos, kingYPos, 50, 50);

  if (keyIsPressed && keyCode === RIGHT) {
    kingXPos = kingXPos + xForce;
    xForce = xForce + 0.1;
    if (xForce >= maxSpeed && keyIsPressed) {
      xForce = maxSpeed;
    }
  }

  if (keyIsPressed && keyCode === LEFT) {
    kingXPos = kingXPos - xForce;
    xForce = xForce + 0.1;
    if (xForce <= -maxSpeed && keyIsPressed) {
      xForce = -maxSpeed;
    }
  }

  if (!keyIsPressed) {
    if (xForce > 0) {
      kingXPos = kingXPos + xForce;
      xForce = xForce - 0.1;
    }
  }
};

这段代码被破坏了,因为当我释放左键时,my!keyIsPressed if语句仍为真,而xForce仍然变小。我只是不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您有一个xForce变量,在某些情况下方向为+/-,在其他情况下没有方向。这就是问题所在。

如果您不想跟踪方向的力,您应该处理xForce符号(是否大于零)。

这可能有效:

  if (keyIsPressed && keyCode === RIGHT) {
    kingXPos = kingXPos + xForce;
    xForce = xForce + 0.1;
    if (xForce >= maxSpeed && keyIsPressed) {
      xForce = maxSpeed;
    }
  }

  if (keyIsPressed && keyCode === LEFT) {
    kingXPos = kingXPos + xForce;
    xForce = xForce - 0.1;
    if (xForce <= -maxSpeed && keyIsPressed) {
      xForce = -maxSpeed;
    }
  }

  if (!keyIsPressed) {
    kingXPos = kingXPos + xForce;
    if (xForce > 0) {
      xForce = xForce - 0.1;
    } else if(xForce < 0) {
      xForce = xForce + 0.1;
    }
  }

请注意,使用此代码,如果对象在一个方向上移动并且您更改了方向,它首先在该方向上减速然后开始向相反方向移动。