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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.07.2011, 20:41
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 1  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Question Как правильнее организовать отмену последнего действия?

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

Скажем, добавляю я объект в дисплей лист, потом перемещаю его в другое место, потом удаляю. Понимаю, что удалил зря - жму откат, от снова появляется, еще раз жму, становится на прежнее место и т.п.
Кто что предложит?

Старый 17.07.2011, 20:46
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 2  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Массив, с элементами-действиями, так же судя по вашей задумке у вас все обьекты всегда будут в памяти? за исключением случаев когда вы перезаписываете действия? (сделали, откатились и сделали по другому)

Старый 17.07.2011, 20:49
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 3  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Массив, с элементами-действиями
У меня такая же идея. Но только что есть "действие"? каким то образом надо его описывать, перед помещением в массив. А реализация пока получается довольно громоздкая.
Цитата:
так же судя по вашей задумке у вас все обьекты всегда будут в памяти?
Да. Но там в любом случае больше 300 мегабайт не натекает. Я уже проверял. Так что все нормально.

Добавлено через 20 минут
Похоже поторопился с темой. Нашел паттерн решющий этот вопрос в книжке Actionscript 3 design patterns.
+ memnto паттерн

Старый 17.07.2011, 22:43
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 4  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Мне кажется здесь больше подойдет паттерн Command. Примерно с таким интерфейсом:
Код AS3:
public interface ICommand 
{
    function execute():void; 
    function redo():void; 
    function undo():void; 
}
И соответственно:
Код AS3:
public interface ICommandHistory extends ICommand 
{
    function addChild(value: ICommand):void;
    function removeChild(value: ICommand):void; 
    function get numChildren():int
}
Думаю с реализацией проблем не будет.

Старый 17.07.2011, 22:46
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 5  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Спасибо. Только я уже нашел этот паттерн, о чем и написал в 3 посте

Старый 18.07.2011, 01:39
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 6  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
Цитата:
Command
тогда уж цепь смотрите http://johnlindquist.com/2011/02/01/...bility-part-1/

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

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
http://www.flairpy.com/mementoPatter...ntoSample.html жми вью сорс

Старый 18.07.2011, 07:32
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
Сообщение от nOobCrafter Посмотреть сообщение
тогда уж цепь смотрите http://johnlindquist.com/2011/02/01/...bility-part-1/
Как-то все мудрено. Паттерн с командой проще. А а в моем случае даже его можно упростить.

Цитата:
http://www.flairpy.com/mementoPatter...ntoSample.html жми вью сорс
Я видел это уже. Read post #3

Старый 18.07.2011, 12:24
Tr1te вне форума Посмотреть профиль Отправить личное сообщение для Tr1te Найти все сообщения от Tr1te
  № 9  
Ответить с цитированием
Tr1te
 
Аватар для Tr1te

Регистрация: Jun 2009
Сообщений: 461
А в чем проблема составить массив?

Пустой лист шаг 0. Добавили объект. Пишем в 0-вой элемент, ссылку на объект, то что его в этом шаге не было. В 1-вый элемент пишем ссылку на объект, пишем что его добавили, и место положения.
Переместили объект. Во 2-ой шаг/элемент массива пишем ссылку на объект, и место положения, итд.

Нажали undo, текущий шаг 2, читаем массив на шаг назад, там у нас добавлен объект, объект уже есть ничего не делаем, проверяем свойста... координаты смещаем по указанным координатам.
Еще раз undo, назад текущий шаг 1, читаем на элемент ниже. Ссылка на объект, объекта не было. по ссылки удаляем объект.
Жмем redo, читаем... создан объект с координатами... делаем.

Вы решили как компания LOLapps, которые вложили тонну средств в движок, а потом на его базе делать тонну игрушек?

Старый 18.07.2011, 12:35
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 10  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Tr1te, я так и делаю сейчас.
Просто сначала пришла идея данные о перемещениях и всем остальном, хранить в самих объектах. Все объекты, которые могут быть добавлены у меня применяют интерфейс ICommonChild с нужными методами. Этот способ работает, но не совсем так как надо, потому что для отмены действия надо указать программе для какого именно объекта нужно отменить действие. Централизированный массив лучше.
Цитата:
Вы решили как компания LOLapps, которые вложили тонну средств в движок, а потом на его базе делать тонну игрушек?
У моей игры не будет движка, в том виде, в котором это обычно понимают. Т.е. все, что будет в игре, будет применимо только к ней. Сейчас я пишу редактор уровней, который будет заточен тоже только для нее.

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

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

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


 


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


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