Slick2D - Едно и също движение на всеки компютър

Кодирам игра с приятели и имаме проблеми да получим същото движение на нашия различен компютър. В Slick2D използваме Delta, за да направим движението:

    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 fps!? :P Но в действителност вашето използване на делта трябва да го поддържа. Може би компютърът ви изпълнява играта под скоростта, която може да се играе. - person Anthony Benavente; 01.07.2014