2015-06-20 2 views
0

Я кодирую «Симулятор силы тяжести» в java, который включает в себя только шар, который имеет силу x и y.Java Внедрение рабочей системы FPS

То, как я это делаю в данный момент (который не работает) является следующим:

Правила программы: 4 Количество пикселей в 1 метр. сила тяжести равна 9,8 м/с^2, поэтому земная гравитация.

в моем главном классе у меня есть это:

public int sleepMilli = 17; //the thread will sleep 17 milliseconds after every execution 
public double g = 9.8; //gravity 

затем в главном цикле у меня есть это:

try { 
      Thread.sleep(17); 
     } catch (InterruptedException e) { 
      System.out.println("Thread couldn't sleep."); 
      e.printStackTrace(); 
     } 

так. как бы я начал внедрять рабочую систему fps в эту «игру», чтобы она не влияла на скорость движения мяча?

Если вам нужна дополнительная информация, просто попросите меня сделать это.

+0

Извините, что [fps] (https://en.m.wikipedia.org/wiki/FPS)? – Pang

+0

кадров в секунду @Pang .... – PeterLikesCode

+0

А что такое система fps? – andih

ответ

1

Одно из распространенных решений - это все ваши методы моделирования принимают количество секунд, прошедшее с момента последнего кадра в качестве аргумента. Например, public void move(float secondsElapsed).

Затем в этой основной нити измерьте время, прошедшее с момента последнего кадра, с использованием System.currentTimeMilis(), не предполагайте, что Thread.sleep(17); будет спать ровно 17 миллисекунд.

Это имеет два преимущества: 1) сверхлегкое изменение желаемого FPS и 2) ваши объекты будут двигаться с правильной скоростью, даже если игра FPS упадет.

+0

Итак, в основном цикле (while (true)), я не должен полностью отключать поток. просто выполняйте как можно быстрее? @kajacx – PeterLikesCode

+0

@PeterLikesCode для макс FPS, конечно вещь. Или вы могли бы сказать max 60, так что тогда вы подождете. – kajacx

+0

Я посмотрю, смогу ли я это работать, а затем ответьте/отметьте это «ответ» – PeterLikesCode

Смежные вопросы