Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2012, 23:56
Интересующийся
Отправить личное сообщение для Simulator Посмотреть профиль Найти все сообщения от Simulator
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 14.11.2012, 15:29
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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

Если до фига то целиком.
Если 1-2 то можешь очищать область.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.11.2012 в 15:31.
Ответить с цитированием
  #3 (permalink)  
Старый 14.11.2012, 18:18
Интересующийся
Отправить личное сообщение для Simulator Посмотреть профиль Найти все сообщения от Simulator
 
Регистрация: 01.11.2012
Сообщений: 20

Сообщение от DjDiablo Посмотреть сообщение
а сколько объектов ?

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


Сообщение от Дзен-трансгуманист Посмотреть сообщение
PS: где-то на днях могу набросать код для объединения, но не сейчас.
Это было бы крайней интересно, буду ждать, спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 14.11.2012, 18:32
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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

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

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

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

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

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

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

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

Последний раз редактировалось DjDiablo, 14.11.2012 в 18:39.
Ответить с цитированием
  #5 (permalink)  
Старый 14.11.2012, 18:59
Интересующийся
Отправить личное сообщение для Simulator Посмотреть профиль Найти все сообщения от Simulator
 
Регистрация: 01.11.2012
Сообщений: 20

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

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

от идеи трансгуманиста будет прок, если сотня другая обьектов скучкованы в одной области, и при этом нет обьектов в других областях.
А можно попродробнее пожалуйста) что такое запоминание?
Ответить с цитированием
  #6 (permalink)  
Старый 14.11.2012, 19:32
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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

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

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

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

Последний раз редактировалось DjDiablo, 14.11.2012 в 19:34.
Ответить с цитированием
  #7 (permalink)  
Старый 14.11.2012, 19:37
Интересующийся
Отправить личное сообщение для Simulator Посмотреть профиль Найти все сообщения от Simulator
 
Регистрация: 01.11.2012
Сообщений: 20

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

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

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

либо рисуйте фон для каждого кадра, вместо очистки экрана.
либо используйте несколько канвасов друг над другом, на нижнем фон, на верхнем спрайты и clearRect очистка
теперь все понятно, спасибо)
Ответить с цитированием
  #8 (permalink)  
Старый 17.11.2012, 02:04
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

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

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

*позаимствовано у Максимуса
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 17.11.2012 в 02:10.
Ответить с цитированием
  #9 (permalink)  
Старый 21.01.2016, 15:24
Профессор
Отправить личное сообщение для clecar Посмотреть профиль Найти все сообщения от clecar
 
Регистрация: 11.02.2015
Сообщений: 254

Тема конечно устарела, а я вот который день не могу понять, как сделать ластик в моей Раскраске круглым. http://clecar.ru/ris.html
Ответить с цитированием
  #10 (permalink)  
Старый 21.01.2016, 18:54
Профессор
Отправить личное сообщение для Siend Посмотреть профиль Найти все сообщения от Siend
 
Регистрация: 04.02.2012
Сообщений: 196

clecar, https://developer.mozilla.org/en-US/...al/Compositing
Тебе нужен source-out, вникай.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
canvas и drawImage() jussik Элементы интерфейса 0 27.10.2012 16:57
Почему неправильно вырисовывается canvas? Amateur Events/DOM/Window 0 19.09.2012 10:45
Создание экземпляра Canvas не затрагивая HTML Tails Общие вопросы Javascript 2 09.03.2012 13:55
Проблемы с Canvas Verhal Общие вопросы Javascript 1 24.01.2012 21:51
Добавить на canvas еще один елемент greengarlic Общие вопросы Javascript 5 22.09.2010 10:16