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

Freddy 
Сейчас: Offline
Magatino,

  1. public class MyCanvas extends Canvas implements Runnable{
  2. ...
  3.     private final static long ONE_FRAME_TIME = 1000 / 25; //время для одного кадра в милисекундах, из расчёта, что нам необходимо показать 25 кадров в секунду
  4.  
  5.     public void run() {
  6.         long timeStart, timeDelta; //здесь будет хранится время, затраченное на одну итерацию игрового цикла
  7.         while(gameNotFinished()) {
  8.             timeStart = System.currentTimeMillis();
  9.             //логика игры
  10.             ...
  11.             repaint();
  12.             timeDelta = System.currentTimeMillis() - timeStart;
  13.             if (timeDelta < ONE_FRAME_TIME) {
  14.                 try {
  15.                     Thread.sleep(ONE_FRAME_TIME - timeDelta);
  16.                 }
  17.                 catch(InterruptedException ex) {
  18.                     ex.printStackTrace();
  19.                 }
  20.             }
  21.         }
  22.     }
  23. }
Значение ONE_FRAME_TIME подбирать ручками в процессе тестирования, я только пример дал.

Изменено Freddy (26.02 / 08:57) (всего 2 раза)
- 26.02.2014 / 11:17
Magatino
  Администратор

Magatino 
Сейчас: Offline
samodelkin (26.02.2014/05:54)
Magatino, чтобы анимация на всех устровах была плавной, используй игровую канву(GameCanvas) из пакета javax.microedition.lcdui.game
Значит при Canvas анимация коряво себя ведёт , а при GameCanvas анимация на всех устройствах идёт плавно , ну ты мля самый знаешь кто :lol:
- 26.02.2014 / 12:56
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
Класс javax.microedition.lcdui.game.GameCanvas отличается от своего суперкласса javax.microedition.lcdui.Canvas двумя вещами: буферизацией графики и способностью возвращать состояния клавиш.
Буферизация графики позволяет создавать все графические объекты вне экрана, а затем переносить их на экран все сразу. Это делает анимацию более плавной и устраняет эффект мигания.
Источник: http://www.mobilab.ru/articles/18/
- 26.02.2014 / 13:14
Magatino
  Администратор

Magatino 
Сейчас: Offline
samodelkin (26.02.2014/12:56)
Класс javax.microedition.lcdui.game.GameCanvas отличается от своего суперкласса javax.microedition.lcdui.Canvas двумя вещами: буферизацией графики и способностью возвращать состояния клавиш.Буферизаци
Да вы сударь упорот!
Анимация не будет на всех устройствах одинакова , для этого как минимум нужен ограничитель кадров , а что ты там используешь Canvas или GameCanvas особой разницы не имеет :gg:
- 26.02.2014 / 14:19
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
Magatino, чтобы сделать на всех устройствах одинаковое количество кадров в секунду, надо знать время, затрачиваемое на один проход игрового цикла, легче всего сделай класс секундомера, в котором сделай метод старта, метод окончания секундомера и метод,возвращающий затраченное время, после чего в главном потоке игры вначале цикла запускай секундомер, а в конце останавливай, а паузу делай с учетом потраченного времени, сейчас выложу класс секундомера, написанного мной.
- 26.02.2014 / 14:21
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
Класс секундомера.


Прикрепленные файлы:
Stopwatch.java (1.03 кб.) Скачано 762 раза
- 26.02.2014 / 15:51
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
samodelkin, "public class Stopwatch extends Object" ну ё-моё(((
__________________
 let live

Изменено aNNiMON (26.02 / 15:51) (всего 2 раза)
- 26.02.2014 / 17:18
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
aNNiMON, а почему нельзя от обьекта наследовать, ведь секундомер- это обьект.
- 26.02.2014 / 17:22
Freddy
  Пользователь

Freddy 
Сейчас: Offline
samodelkin, любой класс неявно наследуется от Object, писать это в коде не нужно.
- 26.02.2014 / 17:25
samodelkin
  Пользователь

samodelkin 
Сейчас: Offline
Freddy, ааа, ясно, спасибо!
Наверх  Всего сообщений: 16875
Фильтровать сообщения
Поиск по теме
Файлы топика (794)