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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 14.10.2009, 21:55
  № 11  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Кто сейчас торомозит я или Artic?)))

Старый 14.10.2009, 23:03
Artic вне форума Посмотреть профиль Найти все сообщения от Artic
  № 12  
Ответить с цитированием
Artic
Banned

Регистрация: Jun 2009
Сообщений: 298
ну просто я не вчитывался, но вроде ,как ,так и не получилось сообщение отловить ? или тема закрыта эликсир найден ?
я просто написал способ отлова и посылки своего сообщение, от другого класса

Старый 15.10.2009, 09:29
  № 13  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
Ясно).
Есть 3 класса. В одном (Main) создается две переменные a:A и b:B. Когда “b” генерирует событие, его должна услышать переменная “a”. Так вот, она ничего не слышит, потому что не наследуется от “b”, потому что не является родителем “b”, потому что “a” является крайней правой веткой (а “b” – левой веткой), потому что “а” – директор (“b” – студент)…)
Поэтому остановились на варианте:
Событие ловится самой переменной b (в классе Main), после чего обрабатывается “а” (которая берется из ссылки хранящейся в “b”).
Смущает только то, что переменные класса А, должны удаляться с помощью класса B, в результате функция для удаления находится в Main, вот(.
ЗЫ.
А у тебя написан способ отлова не от другого, а от того же самого класса, просто главный класс называл А, а не Main)

Старый 15.10.2009, 12:33
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 14  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
блин, вчитывался-вчитывался, так и не мог понять, что конкретно у вас не получается.
чтобы получить событие от b, объект a должен на него подписать. для этого он должен знать о существовании b (иметь не него ссылку). это как раз и сделано в моем примере.
второй вариант: класс Main подписывает a на событие b:
Код AS3:
b.addEventListener("someEvent", a.someHandler);//обработкой занимается a
//или
b.addEventListener("someEvent", this.someHandler);//обработкой занимается Main
то что описал Artic. действительно немного не то
__________________
я могу стать всем, если только захочу

Старый 15.10.2009, 18:09
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 15  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Felicast верно написал, но не совсем.

В обоих случаях обработкой занимается Main. Только обработчик в первом случае - a.someHandler.

Чтобы крикнуть - нужно передать ссылку этого класса в другой класс, например, в конструктор.
Код AS3:
function Constuctor(myMc:DisplayObject){
 
}
теперь можно подисаться на события, что вещает тот класс, что мы передали (он ведь у нас по ссылке myMc доступен)
Код AS3:
myMc.addEventListener(MouseEvent.CLICK, onClick);
function onClick(e:MouseEvent):void{
trace("clicked!");
}

Старый 15.10.2009, 19:24
Artic вне форума Посмотреть профиль Найти все сообщения от Artic
  № 16  
Ответить с цитированием
Artic
Banned

Регистрация: Jun 2009
Сообщений: 298
а ))) я просто говорю же не вчитался ! тогда вот так
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author I
	 */
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
 
			var B:ClassB = new ClassB()
			addChild(B);
			var A:ClassA = new ClassA(B);
			addChild(A);
 
			// entry point
		}
 
	}
 
}
Код AS3:
package  
{
	import flash.display.*;
	import flash.events.*;
 
	/**
	 * ...
	 * @author I
	 */
	public class ClassA extends Sprite
	{
 
		public function ClassA(B:ClassB) 
		{
			B.addEventListener(ClassB.HELLOWORLD, resaveMessage);
		}
		private function resaveMessage(event:Event):void
		{
			trace("helloWorld");
 
		}
	}
 
}
Код AS3:
package  
{
 
	import flash.display.*;
	import flash.events.*;
 
	/**
	 * ...
	 * @author I
	 */
	public class ClassB extends Sprite
	{
		public static var HELLOWORLD:String = "helloworld";
		public function ClassB() 
		{
			var sameButton:Sprite = new Sprite();
			sameButton.graphics.beginFill(0xff0000);
			sameButton.graphics.drawRect(0, 0, 50, 50);
			sameButton.graphics.endFill();
			sameButton.addEventListener(MouseEvent.CLICK, sendMessage);
			addChild(sameButton);
		}
		private function sendMessage(event:Event):void
		{
			dispatchEvent(new Event(ClassB.HELLOWORLD,true));
		}
	}
 
}
на всякий случай приложил проект в FD
Вложения
Тип файла: zip Evented.zip (16.9 Кб, 18 просмотров)

Старый 15.10.2009, 19:40
  № 17  
Ответить с цитированием
Xero201
Guest

Сообщений: n/a
to Felicast: не, эт я просто неправильно понял. Думал что в твоем коде А это моё В и наоборот. А ты просто расширил класс A, так что извини за «вчитывания-вчитывания», так всё конечно работает.

to Artic: ага, именно)
Но Psycho Tiger предложил еще проще без лишних генераций событий! (кстати, спасибо за это):
Код AS3:
public function ClassB(a:A) 
{
_a = a;
sameButton.addEventListener(MouseEvent.CLICK, _a.resaveMessage);
}
Но блин!!! Оказывается в AS 3.0 нельзя удалить объект из самого себя (или брехня?). А мне как раз и нужно удалить. Поэтому все равно пришлось функцию обработки писать в Main. К тому же еще в Main и в массиве надо ссылку занулить, а то без этого объект не удаляется полностью (хотя что-то слышал про слабые ссылки..).
Ладно ребята, спасибо за помощь, дальше уже попробую своим ходом

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:35.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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