|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
[+4 06.05.14]
|
Динамичное сохранение истории рисования
Вот такой вопрос возник, рисуем на объекте ( обычная рисовалка на флеше) кистью например, после отпускания мыши соотв у нас должна сохранится текущее значение графики, при следующем рисовании новое значение.
Я делал так, создал массив и в него пихал это текущее значение методом copyFrom . Ролучается ; в этоге когда делаем андо ( назад по истории) получается что равно - тоесть себя же! Как же правильно все это делать тогда ?! |
|
|||||
Регистрация: Mar 2010
Сообщений: 137
|
Можно оборачивать каждый графический элемент клипом.
В историю писать такой новый, обёрнутый элемент. Последний раз редактировалось semenyakinVS; 05.02.2011 в 17:43. Причина: Убрал косноязычие |
|
|||||
Было бы хорошо после каждого штриха вообще переводить холст в растр, а каждый шаг сохранять как битмапДату (история). Правда не знаю как это скажется на производительности, но я бы попробовал сделать так.
Последний раз редактировалось samana; 05.02.2011 в 17:53. |
|
|||||
Регистрация: Mar 2010
Сообщений: 137
|
Согласен. Никак не привыкну, что в AS3 рулит битмап.
|
|
|||||
[+4 06.05.14]
|
Кстати и битмап дата мне не очень подходит. Дело вот в чем. У меня еще добавляются картинки и текст поверх рисования , и добавляются они как раз в тот контейнер где рисуется. (так надо) , но дело вот в чем, что картинки и текст к истории не относятся. А битмапка будет их хавать! Если конечно только есть выход создавать битмапку сразу из _object.graphics а не полностью через DisplayObject
|
|
|||||
Цитата:
Что касается сохранения ссылки на graphics - тут нет ничего удивительного, весь массив заполнен ссылками на один и тот же объект. Если говорить об отмене действий - то я бы сделал так - на каждое изменение цвета или прозрачности кисти создается новый спрайт - на каждый штрих кисти внутри текущего спрайта создается шейп, содержащий этот штрих - при отмене действия просто удаляем самый верхний шейп - если самый верхний шейп является единственным в текущем спрайте - удаляем заодно и спрайт (+ откатываем цвет и прозрачность кисти) - по завершении рисования все рисуем в битмап
__________________
...вселенская грусть |
|
|||||
[+4 06.05.14]
|
gloomyBrain тяжко ))
Вот решение Сначала как все это работает. ПОтому что пригодится кому нить private function redo(e:MouseEvent):void { if (!_started) { if (_historyIndex != _history.length-1) { _canvas.graphics.copyFrom(_history[_historyIndex+1]); _historyIndex++; isClicked = true; trace('redo'); } } } private function undo(e:MouseEvent):void { if (!_started) { if (_historyIndex != 0) { _canvas.graphics.copyFrom(_history[_historyIndex - 1]); _historyIndex--; isClicked = true; trace('undo'); } } } private function onDown(e:MouseEvent):void { if(isClicked) { var a_t:Shape = new Shape(); a_t.graphics.copyFrom(_canvas.graphics); _history.push(a_t.graphics); isClicked = false; } } Жалко только одно что Не прокатит ))) Я думаю скоро выложу полную рисовалку с объяснениями и пошаговыми действиями для реализации. |
|
|||||
Цитата:
и пользователя не будет злить торможение редактора. Только откат быстрее не станет - придется всё сызнова в битмап-дату перерисовывать Но откат восстановлением сохраненного растра ?? - этож память всю засрать. samana, как ты предлагаешь с этим бороться? Вообще даже 1000 шейпов на 1 редактор - это вполне нормально. А вот 1000 битмап - это уже проблема. |
Часовой пояс GMT +4, время: 08:31. |
|
« Предыдущая тема | Следующая тема » |
|
|