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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.05.2007, 11:25
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 1  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
По умолчанию про delegate

вот типичный пример, когда область видимости не такая, как хотелось бы:
Код:
class game.WinMove {
var mov:MovieClip;
	function WinMove (){
		trace ("инициализация WinMove");
		mov=_root.attachMovie ("shared_skin_move","mc_move",_root.getNextHighestDepth());
		mov.btnCancel.onPress=function (){	trace ("вызываю cancel"); this.cancel ();	}
...}
...
	function cancel (){ 
		mov._visible=false;
	}

}
а хотелось бы вызвать функцию cancel класса. Из хелпа я понял, что для передачи событию нужной области видимости можно использовать Delegate. Но все примеры в хелпе для компонентов и используют eventListener. а в моем варианте Delegete можно использовать?
__________________
~
Never trouble trouble till trouble troubles you!

Старый 12.05.2007, 11:49
CorC вне форума Посмотреть профиль Отправить личное сообщение для CorC Найти все сообщения от CorC
  № 2  
Ответить с цитированием
CorC
 
Аватар для CorC

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Код:
mov.btnCancel.onPress=Delegate.create(this, cancel);
__________________
"We Are The Champions My Friends!" Queen

Старый 12.05.2007, 11:57
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 3  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
только сначало

Код:
import mx.utils.Delegate
__________________
Free-lance | Twitter | Me

Старый 12.05.2007, 11:59
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 4  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
ну import, Это понятно =)
ааа... какой кайф.а то я уже устал передавать в мувик, где происходит событие ссылку на класс, которому это событие нужно принять.
я так понял, что в AS3 этой проблемы не существет в принципе?
__________________
~
Never trouble trouble till trouble troubles you!

Старый 12.05.2007, 12:11
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
В AS3 все на событийной модели и нету таких обработчиков типа onRelease = function. И вызываемые методы связаны с областью видимости класса, в котором они объявлены.

Старый 12.05.2007, 12:25
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 6  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
а как переделать с Delegate такой случай?
Код:
var cur:MovieClip=mov.defence[bodyParts[i]+"Point"];
cur.partName=bodyParts[i]; cur.move=this;
cur.onRelease = function (){ this.move.pointClicked ("defence",this.partName); }
если вызвать так
Код:
cur.onRelease=Delegate.create(this,pointClicked("defence",bodyParts[i]));
то естественно в onRelease будет вызываться РЕЗУЛЬТАТ выполенеия функции pointClicked. а
как правильно?

ЗЫ: _etc, сочувствую Вашей аське. но говорят АОЛ восстанавливала бэкап базы 11 числа, и Ваш номерочек могли восстановить. правда, возможно уже с другим паролем ;-)
__________________
~
Never trouble trouble till trouble troubles you!

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

Регистрация: Jul 2006
Адрес: Земля>Россия>Вологда
Сообщений: 3,056
Отправить сообщение для CorC с помощью ICQ Отправить сообщение для CorC с помощью MSN Отправить сообщение для CorC с помощью Skype™
Нет просто нужно немного класс Delegate поправить, что б параметры передавать.
Мне тут iNils недавно писал его, поищите.
__________________
"We Are The Champions My Friends!" Queen

Старый 12.05.2007, 13:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Не восстановили мой номер

Что касается Delegate, то лично я использую класс ascb.util.Proxy, выкладывал на форуме.


Последний раз редактировалось etc; 12.05.2007 в 13:27.
Старый 12.05.2007, 13:23
Chas вне форума Посмотреть профиль Отправить личное сообщение для Chas Посетить домашнюю страницу Chas Найти все сообщения от Chas
  № 9  
Ответить с цитированием
Chas
[+1 14.08.08]
[+1 20.08.08]
 
Аватар для Chas

Регистрация: Sep 2002
Адрес: simferopol
Сообщений: 981
Отправить сообщение для Chas с помощью ICQ
я уже нашел мод iNils'a. работает. иНилс - папа =)
если ком интересно, то вот ссылка http://www.flasher.ru/forum/showpost...63&postcount=2
на самом деле, мне кажется такие вещи надо ложить в ЧаВО.

2_etc: соболезную. ну... немецкие хакеры отдохнули 9 мая, что скажешь. даже некоторые девятки, светившиеся на форумах были убиты =(
__________________
~
Never trouble trouble till trouble troubles you!

Старый 12.05.2007, 17:43
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 10  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Я слегка его модифицировал.
Код:
/**
 * Класс ru.inils.util.Delegate, модифицированный mx.utils.Delegate. Выполнение функции в заданной области видимости с передачей параметров.
 * 
 * @author	iNils
 * @version	1.1
 * @see		mx.utils.Delegate
 */
class ru.inils.util.Delegate extends Object {
	/**
	 * Передача событий от любого объекта к любому дрогому объекту.
	 * 
	 * @usage	public static create (obj:Object, func:Function, arg:Array) : Function
	 * @param	obj	Object - Объект, целевая область видимости.
	 * @param	func	Function - Метод, обработчик данного объекта.
	 * @param	arg	Array [дополнительный параметр] - Массив передаваемых аргументов, замещающий переменные переданные при вызове целевого метода. По умолчанию возращаются параметры переданный при вызове целевого метода.
	 * @return  Function	- Функция обработчик.
	 */
	public static function create (obj:Object, func:Function, arg:Array):Function {
		var f = function () {
			var targetTemp:Object = arguments.callee.target;
			var funcTemp:Function = arguments.callee.func;
			var argTemp:Array = null;
			if (arguments.callee.arg) {
				argTemp = arguments.callee.arg;
			} else {
				argTemp = arguments;
			}
			return funcTemp.apply (targetTemp, argTemp);
		};
		f.target = obj;
		f.func = func;
		f.arg = arg;
		return f;
	}
}
Пример
Код:
import ru.inils.util.Delegate;
function echo (s) {
	trace (s);
}
o = {};
o.func1 = Delegate.create (this, echo, [33]);
o.func2 = Delegate.create (this, echo);
o.func1 (66); //33
o.func2 (66); //66
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 13.05.2007 в 20:46.
Создать новую тему Ответ Часовой пояс GMT +4, время: 21:44.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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