Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.02.2011, 17:20
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Динамичное сохранение истории рисования

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

Я делал так, создал массив и в него пихал это текущее значение методом copyFrom . Ролучается

Код AS3:
array.push(_canvas.graphics)
; в этоге когда делаем андо ( назад по истории) получается
Код AS3:
_canvas.graphics.copyFrom(array[index])
что равно
Код AS3:
_canvas.graphics.copyFrom(_canvas.graphics)
- тоесть себя же!

Как же правильно все это делать тогда ?!

Старый 05.02.2011, 17:42
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 2  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Можно оборачивать каждый графический элемент клипом.
В историю писать такой новый, обёрнутый элемент.


Последний раз редактировалось semenyakinVS; 05.02.2011 в 17:43. Причина: Убрал косноязычие
Старый 05.02.2011, 17:47
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Было бы хорошо после каждого штриха вообще переводить холст в растр, а каждый шаг сохранять как битмапДату (история). Правда не знаю как это скажется на производительности, но я бы попробовал сделать так.


Последний раз редактировалось samana; 05.02.2011 в 17:53.
Старый 05.02.2011, 17:53
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 4  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
как вариант с битмапдатой да. А вот обертка это ерунда. Столько объектов создавать динамически глупо

Старый 05.02.2011, 17:58
semenyakinVS вне форума Посмотреть профиль Отправить личное сообщение для semenyakinVS Найти все сообщения от semenyakinVS
  № 5  
Ответить с цитированием
semenyakinVS

Регистрация: Mar 2010
Сообщений: 137
Согласен. Никак не привыкну, что в AS3 рулит битмап.

Старый 05.02.2011, 18:06
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 6  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Кстати и битмап дата мне не очень подходит. Дело вот в чем. У меня еще добавляются картинки и текст поверх рисования , и добавляются они как раз в тот контейнер где рисуется. (так надо) , но дело вот в чем, что картинки и текст к истории не относятся. А битмапка будет их хавать! Если конечно только есть выход создавать битмапку сразу из _object.graphics а не полностью через DisplayObject

Старый 05.02.2011, 18:53
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
как вариант с битмапдатой да. А вот обертка это ерунда. Столько объектов создавать динамически глупо
Как-то противоречиво =) Ведь количество битмап будет равно количеству оберток. Соответственно, "только объектов создавать динамически глупо" будет относиться и к тем, и к другим. Только вот битмапы будут занимать значительно больше памяти.

Что касается сохранения ссылки на graphics - тут нет ничего удивительного, весь массив заполнен ссылками на один и тот же объект.

Если говорить об отмене действий - то я бы сделал так
- на каждое изменение цвета или прозрачности кисти создается новый спрайт
- на каждый штрих кисти внутри текущего спрайта создается шейп, содержащий этот штрих
- при отмене действия просто удаляем самый верхний шейп
- если самый верхний шейп является единственным в текущем спрайте - удаляем заодно и спрайт (+ откатываем цвет и прозрачность кисти)
- по завершении рисования все рисуем в битмап
__________________
...вселенская грусть

Старый 05.02.2011, 19:24
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 8  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
gloomyBrain тяжко ))
Вот решение

Сначала как все это работает. ПОтому что пригодится кому нить
Код AS3:
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');
				}
			}
		}
Ну а сохраняем так: сначала при нажатии мышки на полотно сохраняем текущую позицию

Код AS3:
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;
                        }
		}
И не забываем что такую же операцию нам надо провести и после завершения рисунка. Ссылки на локальные объекты сидят в массиве. удобно. С одной стороны плохо то, что создается большое ( безмерно) количество этих локальных объектов висящих в памяти, но по сравнению даже наверное с проходом одного твина - создание сотни таких объектов ниче плохого нам не сделает.
Жалко только одно что
Код AS3:
_history.push((new Shape).graphics.copyFrom(_canvas.graphics));
Не прокатит )))

Я думаю скоро выложу полную рисовалку с объяснениями и пошаговыми действиями для реализации.

Старый 05.02.2011, 19:45
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 9  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Сообщение от samana Посмотреть сообщение
Было бы хорошо после каждого штриха вообще переводить холст в растр, а каждый шаг сохранять как битмапДату (история). Правда не знаю как это скажется на производительности, но я бы попробовал сделать так.
Конечный вариант можно и в растр отрисовать - тогда новые линии шустрее будут рисоваться,
и пользователя не будет злить торможение редактора.
Только откат быстрее не станет - придется всё сызнова в битмап-дату перерисовывать

Но откат восстановлением сохраненного растра ?? - этож память всю засрать.
samana, как ты предлагаешь с этим бороться?

Вообще даже 1000 шейпов на 1 редактор - это вполне нормально.
А вот 1000 битмап - это уже проблема.

Старый 05.02.2011, 19:48
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Вот и я о том же. Что вариант мой самый наверное быстрый будет. да и не сложный в понимании

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.