Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > BlitzMax

Ответ
 
Опции темы
Старый 04.12.2012, 04:41   #1
Черный крыс
 
Сообщений: n/a
Undo & Redo

Привет!

На днях появилась задача реализовать Undo<->Redo в своей программе. В голову приходит такая мысль : создать историю, которая будет хранить в себе список совершенных действий, и при Undo вызывать действия - антиподы.

Придется писать парсер всех возможных действий... что то это запарно слишком...

С такой задачей столкнулся впервые.

Может быть существуют менее трудозатратные методики? Если да то поделитесь пожалуйста знаниями =)
 
Ответить с цитированием
Старый 04.12.2012, 04:57   #2
jimon
 
Сообщений: n/a
Ответ: Undo & Redo

если данных совсем немного то можно при каждом действии сохранять всё состояние программы, если данных много то действия и антидействия довольно хороший подход
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Черный крыс (04.12.2012)
Старый 04.12.2012, 05:01   #3
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений
(для 15,675 пользователей)
Ответ: Undo & Redo

Сообщение от Diablo1909 Посмотреть сообщение
Привет!

На днях появилась задача реализовать Undo<->Redo в своей программе. В голову приходит такая мысль : создать историю, которая будет хранить в себе список совершенных действий, и при Undo вызывать действия - антиподы.

Придется писать парсер всех возможных действий... что то это запарно слишком...

С такой задачей столкнулся впервые.

Может быть существуют менее трудозатратные методики? Если да то поделитесь пожалуйста знаниями =)
А все ли действия будут обратимы?
(Offline)
 
Ответить с цитированием
Старый 04.12.2012, 16:34   #4
Черный крыс
 
Сообщений: n/a
Ответ: Undo & Redo

Программа - большая, поэтому сохранять стэйты проблематично.

А все ли действия будут обратимы?
Хотелось, бы... но хрен знает как оно получится на практике... программа - редактор игровых уровней ( анимация, физика и.т.д. )

Также появилась мысль - задействовать скриптовик Lua. После каждого действия генерить Undo и Redo строчки кода на языке Lua. И когда надо обратить\вернуть что-то - то скармливать нужные строки скриптовому движку. Наверно так и поступлю =)
 
Ответить с цитированием
Старый 05.12.2012, 00:16   #5
Черный крыс
 
Сообщений: n/a
Ответ: Undo & Redo

Каркас Undo\Redo для ваших программ. Может кому пригодится.

rem
	History module
end rem

Function CanUndo:Byte()
	Return Not undoList.IsEmpty()
End Function

Function Undo()
	If undoList.IsEmpty() Then Return
	Local h:THistory = THistory(undoList.RemoveLast())
	h.Undo()
	redoList.AddFirst(h)
End Function

Function CanRedo:Byte()
	Return Not redoList.IsEmpty()
End Function

Function Redo()
	If redoList.IsEmpty() Then Return
	Local h:THistory = THistory(redoList.RemoveFirst())
	h.Redo()
	undoList.AddLast(h)
End Function

Type THistory Abstract
	Method New()
		If Not redoList.IsEmpty()
			redoList = New TList
		End If
		undoList.AddLast(Self)
		If undoList.Count() > MAX_HISTORY
			undoList.RemoveFirst()
		End If
	End Method
	
	Method Undo() Abstract
	Method Redo() Abstract
End Type

Const MAX_HISTORY:Int = 100

Global undoList:TList = New TList
Global redoList:TList = New TList
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com