因此,我在一个类似于wolfenstein 3D的fps上工作,并且我有一点被鼠标的敏感度卡住了,只有在帧频大约为60的时候才能正常工作。
对如何修复它有什么想法吗?
这是我的代码。
射线索引90和91用于左右扫射。是的,我现在意识到我可以使用索引90,然后减去它,得到正确的结果。
我知道这个问题是因为随着帧率的降低(或ellapsedTime的增加),resetMousePos函数会返回一个更高的数字,反之亦然,但我不知道如何解决这个问题
public static void controls()
{
angle += resetMousePos() * Engine.ellapsedTime() * turningSpeed;
System.out.println(resetMousePos() * Engine.ellapsedTime() * turningSpeed);
if (Window.W())
{
pos[0] += (rays.get(45).getDir()[0] * speed) * Engine.ellapsedTime();
pos[1] += (rays.get(45).getDir()[1] * speed) * Engine.ellapsedTime();
}
if (Window.S())
{
pos[0] -= (rays.get(45).getDir()[0] * speed) * Engine.ellapsedTime();
pos[1] -= (rays.get(45).getDir()[1] * speed) * Engine.ellapsedTime();
}
if (Window.A())
{
pos[0] += (rays.get(90).getDir()[0] * speed) * Engine.ellapsedTime();
pos[1] += (rays.get(90).getDir()[1] * speed) * Engine.ellapsedTime();
}
if (Window.D())
{
pos[0] += (rays.get(91).getDir()[0] * speed) * Engine.ellapsedTime();
pos[1] += (rays.get(91).getDir()[1] * speed) * Engine.ellapsedTime();
}
for (int i = 0; i < rays.size(); i++)
{
rays.get(i).setPos(pos);
if (i < 90)
{
rays.get(i).setAngle(Math.toRadians(i + angle));
}
if (i == 90)
{
rays.get(i).setAngle(Math.toRadians(i + angle + 45));
}
if (i == 91)
{
rays.get(i).setAngle(Math.toRadians(i + angle + 225));
}
}
if (Window.Space())
{
System.exit(0);
}
}
public static int resetMousePos()
{
int d = 0;
Point p = Window.getWindow().getLocation();
Robot r = null;
try
{
r = new Robot();
} catch (AWTException e)
{
e.printStackTrace();
}
if (Window.mouseX() != Window.width() / 2)
{
d = (Window.width() / 2) - Window.mouseX();
r.mouseMove(p.x + 8 + Window.width() / 2, p.y + Window.height() / 2);
}
return d;
}发布于 2020-07-10 16:44:28
我找到了一个解决方案。在具有休闲线的线上:
angle += resetMousePos() * Engine.ellapsedTime() * turningSpeed;
我只是简单地将Engine.ellapsedTime()替换为一个双精度数字0.001,它在任何帧速率下都能正常工作。
https://stackoverflow.com/questions/62829564
复制相似问题