Slick2D — одно и то же движение на каждом компьютере

Я кодирую игру с друзьями, и у нас проблемы с получением одного и того же движения на разных компьютерах. В Slick2D мы используем дельту для движения:

    if (input key up)
    {
        sprite = up; // changing the sprite
        if (no collision){
            sprite.update(delta*3); //animation
            y -= delta * 0.3f; // movement
        }
    }

Проблема в том, что дельта — это время между двумя кадрами. И на этот раз на каждом компьютере по-разному из-за производительности. Таким образом, чем медленнее компьютер, тем медленнее будет движение.

Как решить эту проблему ?

Спасибо, что помогли нам, и я надеюсь, что вы понимаете мой английский!


person Marvin    schedule 29.06.2014    source источник
comment
Вы уже поняли: проблема в том, что дельта — это время между двумя кадрами. И на этот раз на каждом компьютере по-разному из-за производительности. Таким образом, чем медленнее компьютер, тем медленнее будет движение, это всегда будет приводить к одинаковому темпу движения в разных системах, потому что дельта может быть выше, но она не вызывается так часто, как более низкая дельта, очевидно.   -  person LOLWTFasdasd asdad    schedule 31.07.2018


Ответы (1)


Как насчет установки целевой частоты кадров для вашего приложения? Он может нормализовать скорость движения всех компьютеров (при условии, что компьютер может достичь этой скорости). Поэтому всякий раз, когда вы впервые создаете экземпляр своего игрового класса, сделайте следующее:

private static final int TARGET_FRAME_RATE = 60;
private static final int WINDOW_WIDTH = 640;
private static final int WINDOW_HEIGHT = 480;

public static void main(String[] args) {
    try {
        AppGameContainer appgc = new AppGameContainer(new MyGame());
        appgc.setDisplayMode(WINDOW_WIDTH, WINDOW_HEIGHT, false);

        // Set the target framerate for the appgc
        appgc.setTargetFrameRate(TARGET_FRAME_RATE);

        appgc.start();
    } catch (SlickException e) {
        System.err.println("There was an error executing the game...");
        e.printStackTrace();     
    }
}
person Anthony Benavente    schedule 01.07.2014
comment
Да, но если компьютер не может играть в игру на TARGET_FRAME_RATE, у нас та же проблема :/ - person Marvin; 01.07.2014
comment
Насколько медленный компьютер, что он не может запустить 2D-игру со скоростью 60 кадров в секунду!? : P Но на самом деле ваше использование дельты должно отслеживать это. Возможно, ваш компьютер запускает игру ниже игровой скорости. - person Anthony Benavente; 01.07.2014