forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Вопрос об изображениях (http://forum.boolean.name/showthread.php?t=16285)

Animan2010 05.02.2012 17:15

Вопрос об изображениях
 
Буду краток, дело обстоит так:
С помощью цикла и вложенного в него цикла я рисую тайловую карту. После этого поверх неё я рисую изображение персонажа в координатах X и Y.
Используя backbuffer я постоянно выполняю cls и flip, после чего снова перерисовывается тайловая карта (порядка двухсот тайлов) и изображение персонажа, с изменившимися координатами. Сколько там фпс в блитце, 60? Отсюда выходит 60*кол-во тайлов на карте = 12000 операций в секунду.
Если экран не очищать и перемещать персонажа, то будет куча одинаковых картинок персонажа на экране. Однако, не трудно ли компьютеру перерисовывать заново тайловую карту после cls?
Можно ли один раз нарисовать полностью карту и лишь изменять положение персонажа на ней?

FireOwl 05.02.2012 17:29

Ответ: Вопрос об изображениях
 
Фпс в Blitz не зафиксирован и зависит от мощности компьютера.
Чтоб его ограничить, (например до 60) нужно что-то вроде дельтатайминга (гуглить по форуму, есть много тем).
Обычно он достигает больших значений.

Вообще компьютеру не трудно. В любой видео-игре происходит постоянное выполнение тысяч операций в секунду. На то они и "видео"-игры.

Кстати, если перерисовывается так и так весь экран (сначала трава, потом гг, потом гуи), то и cls в начале цикла не обязателен вроде.

SBJoker 05.02.2012 17:44

Ответ: Вопрос об изображениях
 
Воопще слишком большое число DIP способно убить производительность любого компа в ноль.

Animan2010 21.02.2012 10:58

Ответ: Вопрос об изображениях
 
Уря, нашёл выход, с помощью grabimage, как облегчить работу компьютеру)
Сперва:
global map_drawned = false
global image = createimage(640,480) ;создаём пустую картинку размером с экран
затем основной цикл:
repeat
if map_drawned = false then ;тут проверка
for y = 0 to 14 ;количество
for x = 0 to 19 ;тайлов на карте (14*19)
drawimage tileset,x*40,y*40,map(x,y) ;тут, думаю, понятно, но не в этом суть.
next
next ;всё, карта нарисована
grabimage image,0,0 ;захватываем полностью изображение
map_drawned = true ;больше эти циклы выполняться не будут
endif

drawimage image,0,0 ;готовая карта рисуется одной картинкой

forever

Может вам всем это известно, но мало ли)

Жека 28.02.2012 13:39

Ответ: Вопрос об изображениях
 
Рисовать в картинку можно и вне основного цикла, тогда и флаг не понадобится.

Nikich 28.02.2012 18:18

Ответ: Вопрос об изображениях
 
Кстати, дельта-тайминг не единственный способ. Есть и стандартный, без таймеров. Когда используешь Flip, то максимальный фпс равен частоте экрана, а если напишешь Flip(false) то вот тогда всё и будет от машины зависеть.

Randomize 29.02.2012 18:00

Ответ: Вопрос об изображениях
 
Цитата:

Сообщение от Nikich (Сообщение 220908)
Кстати, дельта-тайминг не единственный способ. Есть и стандартный, без таймеров. Когда используешь Flip, то максимальный фпс равен частоте экрана, а если напишешь Flip(false) то вот тогда всё и будет от машины зависеть.

Это называется VSync - вертикальная синхронизация.
Смысл в том, что происходит задержка по частоте обновления монитора.
Но частота, то у всех разная.

Nikich 01.03.2012 23:17

Ответ: Вопрос об изображениях
 
Я и не говорил что она у всех одинаковая, но говорить автору темы о том, что зависит фпс от машины тоже не верно в данном случае.


Часовой пояс GMT +4, время: 13:10.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot