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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.07.2011, 14:01
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 1  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
По умолчанию Отмена последнего действия

Добрый день! Делаю "рисовалку", хочу сделать отмену последнего действия...делаю таким способом:
При нажатии мыши, добавляется спрайт, который рисует....при отпускании мыши этот спрайт добавляется в массив...затем отменяю последнее действие так:
Код AS3:
var allSprites:Array = new Array();
btn_undo.addEventListener(MouseEvent.CLICK,onClickUndo);
function onClickUndo(e:Event):void
{
	var sprite:Sprite = allSprites.pop();
	sprite.graphics.clear();
	removeChild(sprite);
	sprite = null;
}
Рисую так:
Код AS3:
function MoveHandler(e:MouseEvent):void
{
	container = new Sprite();
	addChild(container);
 
	container.graphics.beginFill(0xff00ff);
	container.graphics.drawCircle(mouseX, mouseY, 20);
	container.graphics.endFill();
}
Когда отменяется последнее действие, удаляется только последний кужок...т.е. не вся линия которую я нарисовал из спрайтов, а последний круг в этой линии...
Может нужно все вмести эти кружки, сделать в один спрайт? Подскажите...пожалуйста...)

Вот исходник: http://www.varyag207.ru/undo_graphiscs.rar


Последний раз редактировалось iNils; 06.07.2011 в 14:09.
Старый 06.07.2011, 14:16
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
1. Массив вам в принципе не нужен. Взять последний спрайт можно и так
Код AS3:
var sprite:Sprite = removeChildAt (numChildren - 1) as Sprite
2. Если движение это одно действие, то логичнее держать все его кружки в одном спрайте.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.07.2011, 15:02
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 3  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
iNils, да так можно...он удаляет последнее действие, но потом начинает удалять все спрайты, которые есть...

Кружки все держу в одном спрайте...но отмена последнего действия происходит только у одного кружка..если не сложно гляньте мой исходник - выше)

Старый 06.07.2011, 15:30
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Исходник посмотреть не cмогу. У меня CS3.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.07.2011, 15:53
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 5  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
iNils, понятно..вот тогда весь код:
Код AS3:
var container:Sprite;
pic.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp);
function MouseDown(e:MouseEvent):void
{
	addEventListener(MouseEvent.MOUSE_MOVE, enterFrameHandler);
}
function MouseUp(e:MouseEvent):void
{
	allSprites.push(container);
	removeEventListener(MouseEvent.MOUSE_MOVE, enterFrameHandler);
}
function enterFrameHandler(e:MouseEvent):void
{
	container = new Sprite();
	addChild(container);
 
	container.graphics.beginFill(0xff00ff);
	container.graphics.drawCircle(mouseX, mouseY, 20);
	container.graphics.endFill();
}
var allSprites:Array = new Array();
btn_undo.addEventListener(MouseEvent.CLICK,onClickUndo);
function onClickUndo(e:Event):void
{
	var sprite:Sprite = allSprites.pop();
	sprite.graphics.clear();
	removeChild(sprite);
	sprite = null;
}
Нужно будет создать кнопку btn_undo и мувик pic =) Если не сложно, гляньте что не так..а то никак не пойму....

Старый 06.07.2011, 17:15
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 6  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
У вас по MOUSE_MOVE в переменную container записываются спрайты, каждый раз новый. Но в массив allSprites, объект по этой ссылке, будет добавлен только по MOUSE_UP. К тому моменту там будет последний созданный спрайт.

P.S. Вот это:
Код AS3:
sprite.graphics.clear();
в вашем случае, делать бессмысленно.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 06.07.2011, 17:32
geka96 вне форума Посмотреть профиль Отправить личное сообщение для geka96 Найти все сообщения от geka96
  № 7  
Ответить с цитированием
geka96

Регистрация: Jun 2010
Сообщений: 30
alatar, получилось)) Спасибо, всё работает)


Последний раз редактировалось geka96; 06.07.2011 в 17:41.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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