PDA

Просмотр полной версии : метод главного класса


faraday
19.04.2011, 11:54
Здравствуйте, столкнулся с такой проблемой. Есть главный класс main в котором создаётся класс плеера. У плеера есть метод setSong . Так же в классе main есть класс SongBox , который в свою очередь состоит из классов Song. в классе Song стоит слушатель на клик, при котором должны отправляться параметры в метод setSong. Как грамотно можно разрешить эту ситуацию?

Obi
19.04.2011, 12:10
В слушателе клика нужно диспатчить ивент с нужными данными, а на верху его слушать

faraday
19.04.2011, 12:29
спасибо за оперативный ответ, буду пробовать

Добавлено через 15 минут
Никогда не создавал свои события, пробую вот так, не работает:
main:
SoundBox.addEventListener(Event.PLAY, function test() {trace('wroked'); });
song:
this.addEventListener(MouseEvent.CLICK, function cl(){
EventDispatcher(new Event('PLAY'));
});

2Sun
19.04.2011, 13:27
SoundBox.addEventListener('PLAY', function test() {trace('wroked'); });



вот так его слушайте и все получится

faraday
19.04.2011, 13:50
спасибо, но тепреь пишет Ошибка типа Coercion: невозможно преобразовать flash.events::Event@cca4a61 в flash.events.EventDispatcher.

ChuwY
19.04.2011, 17:01
song:

this.addEventListener(MouseEvent.CLICK, clickHandler);

private function clickHandler(event : MouseEvent):void{
this.dispatchEvent(new Event("PLAY"));
}


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

faraday
20.04.2011, 00:26
Класс Song наследуются от спрайта, вроде там уже реализован интерфейс. Не работает

ChuwY
20.04.2011, 00:27
Кинь все, что есть.

faraday
20.04.2011, 00:54
this.addEventListener(MouseEvent.CLICK, function cl(){
this.dispatchEvent(new Event('WORKE'));
При таком коде Событие отправляется, но это событие можно словить только в классе SonBox, в главном классе, при прослушке SongBox пусто.
Идея такая, что есть главный класс в который подключён класс плеера, и класс списка песен. в классе списка песен находятся экземпляры класса песня. и вот при щелке на песню мы должны передавать её свойство(название) в метод плеера.

КорДум
20.04.2011, 01:02
Перестаньте писать анонимные функции. Для оформления кода есть тег [ as3].
В главном классе припишите addEventListener вашего события не экземпляру главного класса, а экземпляру вашего класса, которое диспатчит событие.

faraday
20.04.2011, 01:16
Дело в том, что в главном классе, нет ни одного экземпляра Song, только SongBox

Добавлено через 14 часов 50 минут
проблема до сих пор не решена(

Добавлено через 15 часов 22 минуты
Проблема решена весьма извращенским способом.
При наполнением песнями в SongBox к каждой приклеивается слушатель клика.
при клике мы заносим индекс песни в глобальную переменную и диспатчим событие PLAY в main
в MAIN слушаем PLAY и читаем свойство Index у e.target