17.02.2020 / 16:24 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| GOAR, значит это на андроиде проблемы. Там еще вроде есть метод для частичной перерисовки, может он поможит
__________________
знает толк |
17.02.2020 / 16:27 | |
GOAR Пользователь Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| vl@volk, отрисовку и очистку ставлю один раз. если ставить delay (25) то мерцания нет, все работает. но на скорость роботы программы падает оч, пробовал выводить fps так у меня с delay(25) fps:7 а без delay 58-60
крч без выходная ситуэйшен
|
17.02.2020 / 16:29 | |
GOAR Пользователь Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| vl@volk, чё за метод? в форме show?
|
17.02.2020 / 21:29 | |
Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| Цитата vl@volk: возможно тебе cls не нужен https://www.kansoftware.ru/?tid=5122крч, репаинт надо использовать только тогда, когда что-то отрисовал и надо обновить экран. Но не в каждой итерации цикла. У тебя в целом неправильная последовательность. И ты в этом цикле ожидаешь ввод пользователя? По идее должно быть так: procedure Cls;
begin
SetColor(0, 0, 0);
FillRect(0, 0, GetWidth, GetHeight);
end;
procedure Game;
begin
repeat
Cls;
// что-то отрисовывается
Repaint;
Delay(24);
// Ожидание ввода команд (нажатие клавиш/тап по экрану)
until false;
end;
Вот здесь работает иначе, у меня там нет таких циклов. У тебя оно так и будет мигать скорее всего, пока не изменишь условие этого цикла и не добавишь процедуры. Если надо, могу примеры скинуть. __________________
わからない!! Изменено Витаминыч (17.02 / 21:30) (всего 1 раз) |
17.02.2020 / 22:00 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Витаминыч, прост на экране могут двигаться объекты, поэтому перерисовывать надо часто. В джава ме помню был частичный репейнт, когда обновлялись только те области которые изменились
__________________
знает толк |
17.02.2020 / 23:10 | |
Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| vl@volk, ну тут для такого библиотека нужна, где все эти методы в процедуры закодировали. У него то ничего не двигается, смысл так часто перерисовывать. Даже на компе если запускать что-то в qbasic, то скорость отрисовки норм, а вот в той же программе, но собранной в QB64 все мгновенно - Пост #416630Остается оптимизировать, оптимизировать и оптимизировать. __________________
わからない!! |
18.02.2020 / 00:11 | |
vl@volk Пользователь Сейчас: Offline
Имя: Владислав Откуда: Земля Регистрация: 26.12.2012
| Витаминыч, возможно. Наверное просто мерцает из-за того что криво отрисовка реализована в рантайме мидлетпаскаля для андроида. Надо фиксить, гг
__________________
знает толк |
18.02.2020 / 06:31 | |
GOAR Пользователь Сейчас: Offline
Имя: Николай Николаевич Откуда: Одесса, Украина Регистрация: 29.11.2014
| vl@volk, Витаминыч, за примеры буду благодарен. и ты говорил lib нужна. у тебя всё и за того что delay(24), с таким условием у меня тоже отрисовку гуд. но сказывается на скорости из 60 ФПС стает 11-7. |
18.02.2020 / 11:00 | |
Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| GOAR, На жабке пиши, но там будут другие проблемы |
18.02.2020 / 11:08 | |
Витаминыч Супермодератор Сейчас: Offline
Имя: Василиус Откуда: RZN Регистрация: 20.04.2012
| GOAR, если ты только начал, то попробуй пока стандартными средствами обойтись. С либами можешь запутаться. Но если они нужны, то сюда - Пост #468209 Ты хоть какую-то играбельную основу сделай, и потом запили нормальный счетчик. Пример Пример procedure Cls; // Очистка экрана
begin
SetColor(255, 255, 255);
FillRect(0, 0, 239, 319);
Repaint;
end;
begin
while True do
begin
// Menu ON|OFF
tCurY := curY;
ShowMainMenu;
key := keyToAction(getKeyClicked);
if key = GA_UP then
begin
if curY <> 40 then
CurUp;
end;
if key = GA_DOWN then
begin
if curY <> 124 then
CurDn;
end;
if key = GA_FIRE then
begin
initGame;
end;
end;
end.
Вот под твой случай ничего не нашел. У меня есть основной цикл, но там все завязано на процедурах. Это первый экран из RoachDrom. initGame выглядит так:
procedure InitGame;
begin
// Draw Field
DrawImage(imgRes[10], 0, 0);
x := 115;
for i := 0 to 4 do
begin
DrawImage(imgTar[i], x, 231);
x := x + 23;
end;
// потом перенести
font32.Color(255, 0, 0, 0);
DrawString(integerToString(nRound), 81, 94);
Repaint;
Delay(2000);
PlayersDoBets;
end;
А вообще, я щас для теста собрал пример из ампасиде Cubes (это из заставки тараканчиков, только универсальная) - ничего не мигает, скорость отрисовки такая же, как в яве. Дай-ка код счетчика фпс, мне даже интересно стало, что ты там такое накодил __________________
わからない!!
Прикрепленные файлы: Cubes.apk (203.13 кб.) Скачано 220 раз |