![]() |
Как правильнее организовать отмену последнего действия?
В данный момент пишу продвинутый редактор уровней для своей будущей игры, и решил в нем организовать отмену и возврат действий (undo / redo). Причем хочу сделать длинные откаты, вплоть до пустого документа.
Своя идея как это реализовать конечно есть, но хотелось бы почитать предложения людей, которые этим либо занимались сами, либо знают как это правильно делается. Скажем, добавляю я объект в дисплей лист, потом перемещаю его в другое место, потом удаляю. Понимаю, что удалил зря - жму откат, от снова появляется, еще раз жму, становится на прежнее место и т.п. Кто что предложит? |
Массив, с элементами-действиями, так же судя по вашей задумке у вас все обьекты всегда будут в памяти? за исключением случаев когда вы перезаписываете действия? (сделали, откатились и сделали по другому)
|
Цитата:
Цитата:
Добавлено через 20 минут Похоже поторопился с темой. Нашел паттерн решющий этот вопрос в книжке Actionscript 3 design patterns. + memnto паттерн |
Мне кажется здесь больше подойдет паттерн Command. Примерно с таким интерфейсом:
Код AS3:
Код AS3:
|
Спасибо. Только я уже нашел этот паттерн, о чем и написал в 3 посте :)
|
Цитата:
|
|
Цитата:
Цитата:
|
А в чем проблема составить массив?
Пустой лист шаг 0. Добавили объект. Пишем в 0-вой элемент, ссылку на объект, то что его в этом шаге не было. В 1-вый элемент пишем ссылку на объект, пишем что его добавили, и место положения. Переместили объект. Во 2-ой шаг/элемент массива пишем ссылку на объект, и место положения, итд. Нажали undo, текущий шаг 2, читаем массив на шаг назад, там у нас добавлен объект, объект уже есть ничего не делаем, проверяем свойста... координаты смещаем по указанным координатам. Еще раз undo, назад текущий шаг 1, читаем на элемент ниже. Ссылка на объект, объекта не было. по ссылки удаляем объект. Жмем redo, читаем... создан объект с координатами... делаем. Вы решили как компания LOLapps, которые вложили тонну средств в движок, а потом на его базе делать тонну игрушек? |
Tr1te, я так и делаю сейчас.
Просто сначала пришла идея данные о перемещениях и всем остальном, хранить в самих объектах. Все объекты, которые могут быть добавлены у меня применяют интерфейс ICommonChild с нужными методами. Этот способ работает, но не совсем так как надо, потому что для отмены действия надо указать программе для какого именно объекта нужно отменить действие. Централизированный массив лучше. Цитата:
|
| Часовой пояс GMT +4, время: 22:20. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.