как заставить работать чувствительность мыши с частотой кадров - PullRequest
0 голосов
/ 10 июля 2020

так что я работаю над 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;
}

1 Ответ

0 голосов
/ 10 июля 2020

Я нашел решение. в строке, которая имеет следующее:

angle + = resetMousePos () * Engine.ellapsedTime () * TurnSpeed;

я просто заменил Engine.ellapsedTime () только двойным числом 0.001 и он отлично работает с любой частотой кадров.

...