2013-08-19 3 views
1

У меня есть кнопка, которая была добавлена ​​на сцену. Когда он создается, он перемещается в видимую область сцены и вызывает функцию активирования, которая добавляет к нему прослушиватель событий, который ищет мышью. Однако по какой-то причине это не работает. Есть идеи о том, почему? Я попытался добавить слушателя к объекту через тот, который его создал, но это тоже не работает.AS3 Мышь не работает

package menus { 

import flash.display.MovieClip; 
import flash.utils.Timer; 
import flash.events.*; 

public class MenuPlayButton extends MovieClip { 
    private var _stageWidth, _stageHeight:int; 
    private var comeInTimer:Timer; 
    private var buttonSpeed:Number; 

    public function MenuPlayButton(stageWidth:int, stageHeight:int) { 
     _stageWidth = stageWidth; 
     _stageHeight = stageHeight; 

     alpha = 1; 
     rescaleMe(); 
     repositionMe(); 
     comeIntoMenu(); 
    } 

    private function rescaleMe():void { 
     var oldWidth = this.width; 
     var oldHeight = this.height; 

     this.height = _stageHeight/10; 
     this.width = (this.height * oldWidth)/oldHeight; 
    } 

    private function repositionMe():void { 
     this.x = 0 - this.width; 
     this.y = _stageHeight * 0.56; 
    } 

    private function comeIntoMenu():void { 
     //Sets button's original speed 
     buttonSpeed = _stageHeight/40; 

     //Adds timer that moves in the button 
     comeInTimer = new Timer(10,0); 
     comeInTimer.addEventListener(TimerEvent.TIMER, comeInTimerListener); 
     comeInTimer.start(); 
    } 

    private function comeInTimerListener(e:TimerEvent):void { 
     if(x < 0) { 
      x += buttonSpeed; 
      buttonSpeed *= 0.93; 
     } else { 
      x = 0; 
      activate(); 
     } 
    } 

    private function activate():void { 
     //Kills off timer 
     comeInTimer.removeEventListener(TimerEvent.TIMER, comeInTimerListener); 
     comeInTimer.stop(); 
     comeInTimer = null; 
     this.addEventListener(MouseEvent.MOUSE_DOWN, clicked); 
     trace("Button should be activated"); //This gets traced 
    } 

    function clicked(e:MouseEvent) { 
     trace("Button pressed"); 
    } 
} 

}

+0

Weird, Я не вижу никаких проблем с этим кодом. Рассмотрите трассировку 'this.stage',' this.x' и 'this.y', а также кнопку' Button нужно активировать ', возможно, что ваша кнопка выключена из-за недоступности сцены во время ее создания. В этом случае добавьте 'if (stage) init(); \t else addEventListener (Event.ADDED_TO_STAGE, init); 'стандартная структура в конструкторе и переместить его код в' function init (e: Event = null): void {...} 'где вы можете обратиться к этапу и получить его' stageWidth' и 'stageHeight' без параметров конструктора. – Vesper

+0

Я пробовал отслеживать кнопку, она дает правильные результаты. Однако, когда я пытаюсь отслеживать Mouse.x, он дает мне: menu \ MenuPlayButton.as, строка 65 \t 1120: доступ к неопределенному свойству Мышь. – DefinitelyNotAPlesiosaur

+0

Подождите секунду ... Без отслеживания код работает, когда я импортирую отображение. * Вместо просто MovieClip! O_o – DefinitelyNotAPlesiosaur

ответ

0

Прежде всего щелкнул функция должна быть пустота! Попробуйте изменить код на

This.addEventListener (MouseEvent.CLICK, щелкнул): пустота; {

Тогда

Функция щелкнул (е: MouseEvente.CLICK): недействительным; {

Смежные вопросы