26.02.2014 / 08:56 | |
Freddy Пользователь Сейчас: Offline
Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
| Magatino, public class MyCanvas extends Canvas implements Runnable{
...
private final static long ONE_FRAME_TIME = 1000 / 25; //время для одного кадра в милисекундах, из расчёта, что нам необходимо показать 25 кадров в секунду
public void run() {
long timeStart, timeDelta; //здесь будет хранится время, затраченное на одну итерацию игрового цикла
while(gameNotFinished()) {
timeStart = System.currentTimeMillis();
//логика игры
...
repaint();
timeDelta = System.currentTimeMillis() - timeStart;
if (timeDelta < ONE_FRAME_TIME) {
try {
Thread.sleep(ONE_FRAME_TIME - timeDelta);
}
catch(InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
}
Значение ONE_FRAME_TIME подбирать ручками в процессе тестирования, я только пример дал. Изменено Freddy (26.02 / 08:57) (всего 2 раза) |
26.02.2014 / 11:17 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| samodelkin (26.02.2014/05:54) Magatino, чтобы анимация на всех устровах была плавной, используй игровую канву(GameCanvas) из пакета javax.microedition.lcdui.gameЗначит при Canvas анимация коряво себя ведёт , а при GameCanvas анимация на всех устройствах идёт плавно , ну ты мля самый знаешь кто |
26.02.2014 / 12:56 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Класс javax.microedition.lcdui.game.GameCanvas отличается от своего суперкласса javax.microedition.lcdui.Canvas двумя вещами: буферизацией графики и способностью возвращать состояния клавиш. Буферизация графики позволяет создавать все графические объекты вне экрана, а затем переносить их на экран все сразу. Это делает анимацию более плавной и устраняет эффект мигания. Источник: http://www.mobilab.ru/articles/18/ |
26.02.2014 / 13:14 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| samodelkin (26.02.2014/12:56) Класс javax.microedition.lcdui.game.GameCanvas отличается от своего суперкласса javax.microedition.lcdui.Canvas двумя вещами: буферизацией графики и способностью возвращать состояния клавиш.БуферизациДа вы сударь упорот! Анимация не будет на всех устройствах одинакова , для этого как минимум нужен ограничитель кадров , а что ты там используешь Canvas или GameCanvas особой разницы не имеет |
26.02.2014 / 14:19 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Magatino, чтобы сделать на всех устройствах одинаковое количество кадров в секунду, надо знать время, затрачиваемое на один проход игрового цикла, легче всего сделай класс секундомера, в котором сделай метод старта, метод окончания секундомера и метод,возвращающий затраченное время, после чего в главном потоке игры вначале цикла запускай секундомер, а в конце останавливай, а паузу делай с учетом потраченного времени, сейчас выложу класс секундомера, написанного мной.
|
26.02.2014 / 14:21 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Класс секундомера.
Прикрепленные файлы: Stopwatch.java (1.03 кб.) Скачано 762 раза |
26.02.2014 / 15:51 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| samodelkin, "public class Stopwatch extends Object" ну ё-моё(((
__________________
let live Изменено aNNiMON (26.02 / 15:51) (всего 2 раза) |
26.02.2014 / 17:18 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| aNNiMON, а почему нельзя от обьекта наследовать, ведь секундомер- это обьект.
|
26.02.2014 / 17:22 | |
Freddy Пользователь Сейчас: Offline
Имя: Игорь Откуда: Воронеж Регистрация: 30.01.2010
| samodelkin, любой класс неявно наследуется от Object, писать это в коде не нужно.
|
26.02.2014 / 17:25 | |
samodelkin Пользователь Сейчас: Offline
Имя: Сергей Откуда: Липецк Регистрация: 05.11.2013
| Freddy, ааа, ясно, спасибо!
|