Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   очистка canvas (https://javascript.ru/forum/misc/33205-ochistka-canvas.html)

Simulator 13.11.2012 23:56

очистка 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);
}

а когда объектов много?
Спасибо!

DjDiablo 14.11.2012 15:29

а сколько объектов ?

Если до фига то целиком.
Если 1-2 то можешь очищать область.

Simulator 14.11.2012 18:18

Цитата:

Сообщение от DjDiablo (Сообщение 215940)
а сколько объектов ?

Если до фига то целиком.
Если 1-2 то можешь очищать область.

да мне просто стало интересно, со скольки объектов выгоднее очищать сразу всю канву)
а так планируется не больше 30 объектов на экране, может 50, но это точно максимум. большую же часть времени будет примерно 15.


Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 215871)
PS: где-то на днях могу набросать код для объединения, но не сейчас.

Это было бы крайней интересно, буду ждать, спасибо!

DjDiablo 14.11.2012 18:32

гипотетически

профит=ширина канваса*высоту канваса - (ширина спрайта*высоту спрайта)* кол-во спрайтов

если профит, значение положительное то чистим спрайт
если профит, отрицательное то канву.

на практике
в реале 20-30 штук спрайтов уже тормозят, если спрайт запоминат часть фона.

Без запоминания 1000 помоему, дальше томоза

очистка всего экрана 5000 спрайтов, дальше тормоза

у меня в хроме так получилось

от идеи трансгуманиста будет прок, если сотня другая обьектов скучкованы в одной области, и при этом нет обьектов в других областях.

Simulator 14.11.2012 18:59

Цитата:

Сообщение от DjDiablo (Сообщение 215977)
гипотетически
в реале 20-30 штук спрайтов уже тормозят, если спрайт запоминат часть фона.

Без запоминания 1000 помоему, дальше томоза

от идеи трансгуманиста будет прок, если сотня другая обьектов скучкованы в одной области, и при этом нет обьектов в других областях.

А можно попродробнее пожалуйста) что такое запоминание?

DjDiablo 14.11.2012 19:32

это плохая была идея
Непомню где я её использывал, толи на спектруме толи в qbasic на 386, непомню. Но где-то она точно клёва работала :D\

суть в том что перед тем как прорисоваться, спрайт копирует ту часть канваса в которую он будет рисоваться, затем рисуется, на следующем такте спрайт возвращает часть скопированного фона, передвигается и запоминает часть фона вновь.

но это бредовая для js идея, извлечение данных из канваса дико тормозная вещь. Вместо тысяч спрайтов по экрану с трудом будут ползать несколько десятков.

либо рисуйте фон для каждого кадра, вместо очистки экрана.
либо используйте несколько канвасов друг над другом, на нижнем фон, на верхнем спрайты и clearRect очистка

Simulator 14.11.2012 19:37

Цитата:

Сообщение от DjDiablo (Сообщение 215994)
это плохая была идея
Непомню где я её использывал, толи на спектруме толи в qbasic на 386, непомню. Но где-то она точно клёва работала :D\

суть в том что перед тем как прорисоваться, спрайт копирует ту часть канваса в которую он будет рисоваться, затем рисуется, на следующем такте спрайт возвращает часть скопированного фона, передвигается и запоминает часть фона вновь.

но это бредовая для js идея, извлечение данных из канваса дико тормозная вещь. Вместо тысяч спрайтов по экрану с трудом будут ползать несколько десятков.

либо рисуйте фон для каждого кадра, вместо очистки экрана.
либо используйте несколько канвасов друг над другом, на нижнем фон, на верхнем спрайты и clearRect очистка

теперь все понятно, спасибо)

nerv_ 17.11.2012 02:04

Цитата:

Сообщение от Дзен-трансгуманист
Вообще не представляю как можно (и можно ли?) свести задачу к O(N log N), чтобы она себя оправдала.

а мы на тебя так рассчитвали! Теперь буду плакать всю ночь :cray:

не грусти, бро* :)

*позаимствовано у Максимуса

clecar 21.01.2016 15:24

Тема конечно устарела, а я вот который день не могу понять, как сделать ластик в моей Раскраске круглым. http://clecar.ru/ris.html

Siend 21.01.2016 18:54

clecar, https://developer.mozilla.org/en-US/...al/Compositing
Тебе нужен source-out, вникай.


Часовой пояс GMT +3, время: 12:26.