Просмотр полной версии : Не отрабатывает листенер мыши
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
/**
* ...
* @author Me
*/
public class Main extends MovieClip {
public function Main() {
addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
}
private function addedToStageListener(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
graphics.beginFill(0x000000);
graphics.drawCircle(300, 300, 20);
graphics.endFill();
addEventListener(MouseEvent.CLICK, mouseClickListener)
trace (hasEventListener(MouseEvent.CLICK)); //True
}
private function mouseClickListener(e:MouseEvent):void {
trace ('olololololol'); //Никогда не вызывается
}
}
}
Аналогично для маусап, маусмув и прочих. Что я делаю не так?
что бы сработало Вам надо найти область которую занимает Ваш Main и нажать на нее = ), тогда заработает
Sintesis
27.06.2011, 15:36
вот так можно:
package {
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
/**
* ...
* @author Me
*/
public class Main extends Sprite {
public function Main() {
addEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
}
private function addedToStageListener(e:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, addedToStageListener);
var circle:MovieClip = new MovieClip();
circle.graphics.beginFill(0x000000);
circle.graphics.drawCircle(300, 300, 20);
circle.graphics.endFill();
circle.addEventListener(MouseEvent.CLICK, mouseClickListener);
stage.addChild(circle);
}
private function mouseClickListener(e:MouseEvent):void {
trace ('olololololol'); //Никогда не вызывается
}
}
}
Не рисуйте в graphics Main'а, создайте Sprite, добавте его addChild'ом в Main и рисуйте в нем.
Sintesis, spooner, да, со спрайтом клики обрабатываются. Но вот вопрос, отчего же не работает первый вариант с рисованием прямо в Main? Меня это, признаться удивило.
Привет!
Sintesis, spooner, да, со спрайтом клики обрабатываются. Но вот вопрос, отчего же не работает первый вариант с рисованием прямо в Main? Меня это, признаться удивило.
Потому что класс Graphics наследуется только от Object - следственно он не реагирует на события "мыши".
Потому что класс Graphics наследуется только от Object - следственно он не реагирует на события "мыши".
Не в ту сторону мыслите. Main расширяется от наследника InteractiveObject, а значит клики должны срабатывать.
DocumentClass (http://books.google.ru/books?id=gUHX2fcLKxYC&lpg=PA533&ots=cvPZ0qbQv8&dq=Vector%20graphics%20ignored%20in%20main-class%20instance&pg=PA533#v=onepage&q=Vector%20graphics%20ignored%20in%20main-class%20instance&f=false) не слушает события мыши.
Развеяли непонятку, Дмитрий.
Тогда другой вопрос. Код приведённый выше - максимальное упрощение от бессилия. Изначально там создавался инстанс заембеженной SWF и на неё вешался листенер. Что-то вроде этого:
[Embed source='../lib/some.swf'] private var SWFObject:Class;
var swf:MovieClip = new SWFObject() as MovieClip;
addChild(swf);
swf.addEventListener(MouseEvent.CLICK,clickListener);
И всё равно клик не срабатывал. Этот инстанс разве попадает под определение векторной графики? Или проблема в том, что где-то в той swf может отдельно слушаться on(press) и событие просто не поднимается до контейнера? Если да - то можно ли как-то прослушивать такие непонятные флешки (с заранее неизвестным содержимым)? Что-нибудь вроде жкверного preventDefault()?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.