13.11.2012, 23:56
|
Интересующийся
|
|
Регистрация: 01.11.2012
Сообщений: 20
|
|
очистка canvas
Здравствуйте!
Стало интересно когда какую очистку выгоднее использовать.
Например когда объектов на экране мало, что выгоднее:
Очищать всю канву сразу?
canvas.clearRect(0, 0, canvas.width, canvas.height);
или область для каждого объекта?
for(var i in objects){
canvas.clearRect(objects[i].x,objects[i].y,objects[i].width,objects[i].height);
}
а когда объектов много?
Спасибо!
Последний раз редактировалось Simulator, 13.11.2012 в 23:58.
|
|
14.11.2012, 15:29
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
а сколько объектов ?
Если до фига то целиком.
Если 1-2 то можешь очищать область.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 14.11.2012 в 15:31.
|
|
14.11.2012, 18:18
|
Интересующийся
|
|
Регистрация: 01.11.2012
Сообщений: 20
|
|
Сообщение от DjDiablo
|
а сколько объектов ?
Если до фига то целиком.
Если 1-2 то можешь очищать область.
|
да мне просто стало интересно, со скольки объектов выгоднее очищать сразу всю канву)
а так планируется не больше 30 объектов на экране, может 50, но это точно максимум. большую же часть времени будет примерно 15.
Сообщение от Дзен-трансгуманист
|
PS: где-то на днях могу набросать код для объединения, но не сейчас.
|
Это было бы крайней интересно, буду ждать, спасибо!
|
|
14.11.2012, 18:32
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
гипотетически
профит=ширина канваса*высоту канваса - (ширина спрайта*высоту спрайта)* кол-во спрайтов
если профит, значение положительное то чистим спрайт
если профит, отрицательное то канву.
на практике
в реале 20-30 штук спрайтов уже тормозят, если спрайт запоминат часть фона.
Без запоминания 1000 помоему, дальше томоза
очистка всего экрана 5000 спрайтов, дальше тормоза
у меня в хроме так получилось
от идеи трансгуманиста будет прок, если сотня другая обьектов скучкованы в одной области, и при этом нет обьектов в других областях.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 14.11.2012 в 18:39.
|
|
14.11.2012, 18:59
|
Интересующийся
|
|
Регистрация: 01.11.2012
Сообщений: 20
|
|
Сообщение от DjDiablo
|
гипотетически
в реале 20-30 штук спрайтов уже тормозят, если спрайт запоминат часть фона.
Без запоминания 1000 помоему, дальше томоза
от идеи трансгуманиста будет прок, если сотня другая обьектов скучкованы в одной области, и при этом нет обьектов в других областях.
|
А можно попродробнее пожалуйста) что такое запоминание?
|
|
14.11.2012, 19:32
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
это плохая была идея
Непомню где я её использывал, толи на спектруме толи в qbasic на 386, непомню. Но где-то она точно клёва работала \
суть в том что перед тем как прорисоваться, спрайт копирует ту часть канваса в которую он будет рисоваться, затем рисуется, на следующем такте спрайт возвращает часть скопированного фона, передвигается и запоминает часть фона вновь.
но это бредовая для js идея, извлечение данных из канваса дико тормозная вещь. Вместо тысяч спрайтов по экрану с трудом будут ползать несколько десятков.
либо рисуйте фон для каждого кадра, вместо очистки экрана.
либо используйте несколько канвасов друг над другом, на нижнем фон, на верхнем спрайты и clearRect очистка
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 14.11.2012 в 19:34.
|
|
14.11.2012, 19:37
|
Интересующийся
|
|
Регистрация: 01.11.2012
Сообщений: 20
|
|
Сообщение от DjDiablo
|
это плохая была идея
Непомню где я её использывал, толи на спектруме толи в qbasic на 386, непомню. Но где-то она точно клёва работала \
суть в том что перед тем как прорисоваться, спрайт копирует ту часть канваса в которую он будет рисоваться, затем рисуется, на следующем такте спрайт возвращает часть скопированного фона, передвигается и запоминает часть фона вновь.
но это бредовая для js идея, извлечение данных из канваса дико тормозная вещь. Вместо тысяч спрайтов по экрану с трудом будут ползать несколько десятков.
либо рисуйте фон для каждого кадра, вместо очистки экрана.
либо используйте несколько канвасов друг над другом, на нижнем фон, на верхнем спрайты и clearRect очистка
|
теперь все понятно, спасибо)
|
|
17.11.2012, 02:04
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Дзен-трансгуманист
|
Вообще не представляю как можно (и можно ли?) свести задачу к O(N log N), чтобы она себя оправдала.
|
а мы на тебя так рассчитвали! Теперь буду плакать всю ночь
не грусти, бро*
*позаимствовано у Максимуса
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 17.11.2012 в 02:10.
|
|
21.01.2016, 15:24
|
Профессор
|
|
Регистрация: 11.02.2015
Сообщений: 254
|
|
Тема конечно устарела, а я вот который день не могу понять, как сделать ластик в моей Раскраске круглым. http://clecar.ru/ris.html
|
|
21.01.2016, 18:54
|
Профессор
|
|
Регистрация: 04.02.2012
Сообщений: 196
|
|
|
|
|
|