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

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

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

Регистрация: Nov 2010
Сообщений: 430
По умолчанию Реализация возможности «Шаг назад»

Здравствуйте.
Хочу реализовать возможность вернуться на шаг назад/вперед в приложении.

Мысль примерно такая: есть некоторый массив, в котором ссылки на функции, и чтобы шагнуть назад/вперед, нужно просто вызвать последний элемент в массиве.
Класс Manager:
Код AS3:
 
public class Manager
[...]
private static var _forward:Vector.<Function>;
[...]
// сеттер и геттер функции из стека «вперед»
public static function set forward(f:Function):void{
		_forward.push(f);
}
public static function get forward():Function{
	return _forward[_forward.length-1];
}
Использование в другом классе:
Код AS3:
[...]
Manager.forward = _map.moveObject(mo, 0, 150, -150);
[...]
Такое использование вызывает ошибку.
Подскажите, правильная ли идея и реализация? Если нет, как можно поправить?
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

Старый 05.04.2012, 13:08
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Код AS3:
public static function pushForward(f:Function , ... rest):void{
		_forward.push([f,rest]);
}
public static function get forward():Function{
	return _forward[_forward.length-1];
}
_map.moveObject(mo, 0, 150, -150);
Manager.pushForward( _map.moveObject , mo, 0, 150, -150);
Придется для каждой функции писать отмену.
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

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

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
У Вас не работает потому что
Код AS3:
_map.moveObject(mo, 0, 150, -150);
возвращает не функцию, а результат функции (в данном случае видимо void). Чтобы получить ссылку на функцию нужно сделать так:
Код AS3:
Manager.forward = _map.moveObject;
Теперь видно, что кроме функции нужны еще и параметры (и их количество может меняться), и тоже придется хранить. Вообще данную задачу решают с использование паттерна Command. Примерно с таким интерфейсом:
Код AS3:
package
{
	public interface ICommand
	{
		function execute():*;
		function undo():void;
		function redo();
	}
}
И в этом объекте хранится вся необходимая инф-ция чтобы выполнить/отменить какое-то минимально отменяемое действие.
А вообще поиск рулит.
__________________
http://www.chessmax.ru


Последний раз редактировалось Inet_PC; 05.04.2012 в 13:16.
Создать новую тему Ответ Часовой пояс GMT +4, время: 15:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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