18.08.2016 / 23:56 | |
AHiLLA Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| aNNiMON, рандом я давно юзаю Прост если там звезды рандомно отображать, они могут в кучку лепиться. Нужен специальный алгоритм, лень его делать Изменено AHiLLA (18.08 / 23:56) (всего 1 раз) |
19.08.2016 / 00:46 | |
kalterfive Пользователь Сейчас: Offline
Имя: Гриб Откуда: Оренбург - Нежинка Регистрация: 16.10.2013
| Ну, может, хоть кому‐нибудь пригодится: 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 Пользователь Сейчас: Offline
Имя: Али Откуда: Махачкала Регистрация: 19.01.2010
| kalterfive, номр, мне пригодится, постараюсь не копировать |
25.08.2016 / 10:54 | |
Wladimir134679 Пользователь Сейчас: Offline
Имя: Смерть Регистрация: 31.07.2015
| Подскажите пожалуйста! Вот мне надо сдлетать стабильное fps, что бы за секунду было 25кадров, не больше и не меньше, и учитавая что уходит время на прорисовку и обновление данных. Надеюсь вы поняли мысль... Зарание спасибо! __________________
Смерть правит миром |
25.08.2016 / 11:57 | |
Artem_x86 Пользователь Сейчас: Offline
Имя: Артём Откуда: Донецк Регистрация: 30.10.2012
| Wladimir134679, // Перед стартом цикла
long cycleTime = System.currentTimeMillis();
// Игровой цикл
{
// код рендеринга и все дела
cycleTime += timeFrame;
// где timeFrame это время одного кадра в милисекундах
// для 25 fps нужно чтобы это значение было 40
long diffrence = cycleTime - System.currentTimeMillis();
if (diffrence > 0) {
try{
Thread.sleep(diffrence);
}catch(InterruptedException e){}
}
}
можно как-то так Изменено Artem_x86 (25.08 / 12:07) (всего 1 раз) |
25.08.2016 / 12:15 | |
aRiGaTo Пользователь Сейчас: Offline
Имя: Snork Откуда: Yerevan Регистрация: 03.02.2010
| Цитата Wladimir134679: что бы за секунду было 25кадров, не больше и не меньшеТелевизора намотрелся что ли. Консоли выдают 30, ПК - 60.
__________________
don't tread on me |
25.08.2016 / 12:19 | |
Wladimir134679 Пользователь Сейчас: Offline
Имя: Смерть Регистрация: 31.07.2015
| aRiGaTo, Нет. Это для примера. Артём, спс. __________________
Смерть правит миром |
25.08.2016 / 12:25 | |
Artem_x86 Пользователь Сейчас: Offline
Имя: Артём Откуда: Донецк Регистрация: 30.10.2012
| Wladimir134679, ну тот код может давать некоторые сбои если твоя программа не вложится в timeFrame, этот вариант будет постабильней: // Игровой цикл
{
long cycleTime = System.currentTimeMillis();
// код рендеринга и все дела
cycleTime += timeFrame - System.currentTimeMillis();
if (cycleTime > 0) {
try{
Thread.sleep(cycleTime);
}catch(InterruptedException e){}
}
}
но выполняет немного больше действий Изменено Artem_x86 (25.08 / 12:26) (всего 1 раз) |
25.08.2016 / 12:54 | |
Wladimir134679 Пользователь Сейчас: Offline
Имя: Смерть Регистрация: 31.07.2015
| Artem_x86, Я всё равно как-то не помаю, в первый раз переменная не задйествована одна, во второй раз берётся переменная где в цикле ты не написал, что мс ней делать.
__________________
Смерть правит миром |
25.08.2016 / 15:29 | |
Artem_x86 Пользователь Сейчас: Offline
Имя: Артём Откуда: Донецк Регистрация: 30.10.2012
| Wladimir134679, вместо timeFrame в обоих случях нужно подставить время кадра.
|