我有一个程序,如果用户按住左箭头键或右箭头键,角色会逐渐加速,最终达到最大速度。释放键时,角色逐渐减慢,直至完全停止。
我的右箭头键很好,但左边坏了。我的左箭头键加速很好,但是当释放键时,角色直接移回到按下左键之前开始的位置。 (可能比它开始时更远)
我知道为什么会这样,但我试图修复它(失败)并且我不想进一步填写我的程序。
这是我的代码:
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仍然变小。我只是不知道如何解决这个问题。
答案 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;
}
}
请注意,使用此代码,如果对象在一个方向上移动并且您更改了方向,它首先在该方向上减速然后开始向相反方向移动。