так что я работаю над fps, подобным wolfenstein 3D, и я немного застрял на чувствительности мыши, работает правильно, только если частота кадров составляет примерно 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;
}