Вниз  Java-программирование (1-ые посты)
- 18.08.2016 / 23:56
AHiLLA
  Пользователь

AHiLLA 
Сейчас: Offline
aNNiMON, рандом я давно юзаю :gg: Прост если там звезды рандомно отображать, они могут в кучку лепиться. Нужен специальный алгоритм, лень его делать

Изменено AHiLLA (18.08 / 23:56) (всего 1 раз)
- 19.08.2016 / 00:46
kalterfive
  Пользователь

kalterfive 
Сейчас: Offline
Ну, может, хоть кому‐нибудь пригодится: code.kalter.longflight.space.Star – это класс, отвечающий за отрисовку звёзд в Long Flight. Сорри за отнюдь не самодокументируемое имя класса и немного странный домен – в то время я только начинал задумываться о качестве кода. Хотя поля ничего, нормально названы.

Этот класс заводит 3 массива: в первых двух координаты (x и y соответственно), а в третьем цвет. Один индекс – одна звезда; для полчения её координат или цвета надо взять их из соответствующего массива как раз по этому индексу.

Метод void paint(Graphics) только рисует (и только звёзды), а void upd() «обновляет» звёзды – двигает их вниз со скоростью, зависящей от яркости цвета – чем звезда белее, тем быстрее она двигается; если достигнут конец экрана, то координата y становится равной нулю.
__________________
 Homo homini penis est.

Изменено kalterfive (19.08 / 01:01) (всего 15 раз)
- 19.08.2016 / 01:11
AHiLLA
  Пользователь

AHiLLA 
Сейчас: Offline
kalterfive, номр, мне пригодится, постараюсь не копировать :gg:
- 25.08.2016 / 10:54
Wladimir134679
  Пользователь

Wladimir134679 
Сейчас: Offline
Подскажите пожалуйста!
Вот мне надо сдлетать стабильное fps, что бы за секунду было 25кадров, не больше и не меньше, и учитавая что уходит время на прорисовку и обновление данных. Надеюсь вы поняли мысль... :)
Зарание спасибо!
__________________
 Смерть правит миром
- 25.08.2016 / 11:57
Artem_x86
  Пользователь

Artem_x86 
Сейчас: Offline
Wladimir134679,
  1. // Перед стартом цикла
  2. long cycleTime = System.currentTimeMillis();
  3. // Игровой цикл
  4. {
  5.  
  6.     // код рендеринга и все дела
  7.  
  8.     cycleTime += timeFrame;
  9.          // где timeFrame это время одного кадра в милисекундах
  10.          // для 25 fps нужно чтобы это значение было 40
  11.     long diffrence = cycleTime - System.currentTimeMillis();
  12.     if (diffrence > 0) {
  13.          try{
  14.               Thread.sleep(diffrence);
  15.          }catch(InterruptedException e){}
  16.     }
  17. }
можно как-то так

Изменено Artem_x86 (25.08 / 12:07) (всего 1 раз)
- 25.08.2016 / 12:15
aRiGaTo
  Пользователь

aRiGaTo 
Сейчас: Offline
Цитата Wladimir134679:
что бы за секунду было 25кадров, не больше и не меньше
Телевизора намотрелся что ли. Консоли выдают 30, ПК - 60.
__________________
 don't tread on me
- 25.08.2016 / 12:19
Wladimir134679
  Пользователь

Wladimir134679 
Сейчас: Offline
aRiGaTo, Нет. Это для примера.

Артём, спс. :)
__________________
 Смерть правит миром
- 25.08.2016 / 12:25
Artem_x86
  Пользователь

Artem_x86 
Сейчас: Offline
Wladimir134679, ну тот код может давать некоторые сбои если твоя программа не вложится в timeFrame, этот вариант будет постабильней:
  1. // Игровой цикл
  2. {
  3.     long cycleTime = System.currentTimeMillis();
  4.     // код рендеринга и все дела
  5.  
  6.     cycleTime += timeFrame - System.currentTimeMillis();
  7.     if (cycleTime > 0) {
  8.          try{
  9.               Thread.sleep(cycleTime);
  10.          }catch(InterruptedException e){}
  11.     }
  12. }
но выполняет немного больше действий

Изменено Artem_x86 (25.08 / 12:26) (всего 1 раз)
- 25.08.2016 / 12:54
Wladimir134679
  Пользователь

Wladimir134679 
Сейчас: Offline
Artem_x86, Я всё равно как-то не помаю, в первый раз переменная не задйествована одна, во второй раз берётся переменная где в цикле ты не написал, что мс ней делать.
__________________
 Смерть правит миром
- 25.08.2016 / 15:29
Artem_x86
  Пользователь

Artem_x86 
Сейчас: Offline
Wladimir134679, вместо timeFrame в обоих случях нужно подставить время кадра.
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)