我正在使用带有slick2d库的java,并试图以动态速度逐块移动。我尝试了几种方法,但没有一种方法可以在瓷砖之间以动态速度移动。有人可以帮助我并提供一些例子吗?
编辑:
我试过这两种方法
移出delta
movementSpeed = 2;
//decide direction
if(targetX != x)
{
animation.update(delta);
if(originalX < targetX)
x += movementSpeed;
else if(originalX > targetX)
x -= movementSpeed;
}
if(targetY != y)
{
animation.update(delta);
if(originalY < targetY)
y += movementSpeed;
else if(originalY > targetY)
y -= movementSpeed;
}
线性插值
public static float lerp(float start, float stop, float t)
{
if (t < 0)
return start;
return start + t * (stop - start);
}
public void move(long delta)
{
if (procentMoved == 0)
{
if (getSpeed(targetX, targetY) != 0)
{
movementSpeed = getSpeed(targetX, targetY);
} else
{
targetX = originalX;
targetY = originalY;
}
}
if (procentMoved < 1)
{
animation.update(delta);
// movementSpeed = getSpeed(targetX, targetY);
procentMoved += movementSpeed;
} else if (procentMoved > 1)
{
animation.update(delta);
//TODO fix bouncing bug
procentMoved = 1;
}
+ movementSpeed);
x = lerp(originalX, targetX, procentMoved);
y = lerp(originalY, targetY, procentMoved);
if (x == targetX)
;
originalY = x;
if (y == targetY)
;
originalY = y;
}
答案 0 :(得分:0)
好像这可能是你的问题。你的if语句刚刚结束,而不是真正发挥作用。此外,你的变量也是混淆的。
if (x == targetX)
; // This will skip the If statement
originalY = x;
if (y == targetY)
; // This will skip the If statement
originalY = y;
}
在所有现实中你都在说
orginalY = x; // Y = X?
orginalY = y; // Y = Y
请不要把它放在心上。我仍然有这个问题,但是我必须做一些更正和自动放置才能使其正常工作。