![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
В данный момент пишу продвинутый редактор уровней для своей будущей игры, и решил в нем организовать отмену и возврат действий (undo / redo). Причем хочу сделать длинные откаты, вплоть до пустого документа.
Своя идея как это реализовать конечно есть, но хотелось бы почитать предложения людей, которые этим либо занимались сами, либо знают как это правильно делается. Скажем, добавляю я объект в дисплей лист, потом перемещаю его в другое место, потом удаляю. Понимаю, что удалил зря - жму откат, от снова появляется, еще раз жму, становится на прежнее место и т.п. Кто что предложит? |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
Добавлено через 20 минут Похоже поторопился с темой. Нашел паттерн решющий этот вопрос в книжке Actionscript 3 design patterns. + memnto паттерн |
|
|||||
|
Мне кажется здесь больше подойдет паттерн Command. Примерно с таким интерфейсом:
public interface ICommand { function execute():void; function redo():void; function undo():void; } Думаю с реализацией проблем не будет. |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Спасибо. Только я уже нашел этот паттерн, о чем и написал в 3 посте
![]() |
|
|||||
|
Цитата:
|
|
|||||
|
|
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
А в чем проблема составить массив?
Пустой лист шаг 0. Добавили объект. Пишем в 0-вой элемент, ссылку на объект, то что его в этом шаге не было. В 1-вый элемент пишем ссылку на объект, пишем что его добавили, и место положения. Переместили объект. Во 2-ой шаг/элемент массива пишем ссылку на объект, и место положения, итд. Нажали undo, текущий шаг 2, читаем массив на шаг назад, там у нас добавлен объект, объект уже есть ничего не делаем, проверяем свойста... координаты смещаем по указанным координатам. Еще раз undo, назад текущий шаг 1, читаем на элемент ниже. Ссылка на объект, объекта не было. по ссылки удаляем объект. Жмем redo, читаем... создан объект с координатами... делаем. Вы решили как компания LOLapps, которые вложили тонну средств в движок, а потом на его базе делать тонну игрушек? |
|
|||||
|
Banned
[+1 05.11.11]
[+1 09.08.11] Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Tr1te, я так и делаю сейчас.
Просто сначала пришла идея данные о перемещениях и всем остальном, хранить в самих объектах. Все объекты, которые могут быть добавлены у меня применяют интерфейс ICommonChild с нужными методами. Этот способ работает, но не совсем так как надо, потому что для отмены действия надо указать программе для какого именно объекта нужно отменить действие. Централизированный массив лучше. Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 05:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|