мой eventListener выходит из области видимости? - PullRequest
0 голосов
/ 20 июля 2011

В настоящее время я создаю игру-стрелялку, в настоящее время у меня есть основной класс, в который я добавляю «главных детей», и у меня есть объектный класс «стрелок», я добавил этого «стрелка» в свой основной,и у меня есть eventListener, MOUSE_CLICK на класс наводчика, однако, когда я сделал щелчок, ничего не происходит, почему это так?в моем случае стрелок должен стрелять пулями.событие не отправляется моему объекту наводчика?

конструктор моего основного класса.

    public function waterMain() 
    {
        Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
        canPlay = true;
        soundTimer = new Timer(300, 1);
        soundTimer.addEventListener(TimerEvent.TIMER, waterSoundHandler, false, 0, true);
        waterMovementSound = new pondSound();
        bg = new Background(stage);
        myRippler = new Rippler(bg , 20, 5, 5);
        //event listeners
        addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
        addEventListener(TouchEvent.TOUCH_MOVE, onTouchBegin);
        addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveTriggered);

        addChild(bg);
        touchPoints = Multitouch.maxTouchPoints;
        if (Multitouch.supportsGestureEvents && Multitouch.supportsTouchEvents)
        {
            trace("Multitouch gesture supported");
            var inputField:TextField = new TextField();
            inputField.border = true;
            inputField.wordWrap = true;
            inputField.text = "Multitouch gesture,touch supported,MTP : "+touchPoints;
            addChild(inputField);
        }else if (Multitouch.supportsTouchEvents)
        {
            trace("touch  supported");
            var inputField2:TextField = new TextField();
            inputField2.border = true;
            inputField2.wordWrap = true;
            inputField2.text = "Multitouch touch supported,MTP : "+touchPoints;
            addChild(inputField2);
        }
        //game
        //creating gunner
        var gun:gunner = new gunner(stage);
        gun.x = stage.stageWidth / 2;
        gun.y = stage.stageHeight;
        addChild(gun);
    }

класс стрелка

package  
{
    import flash.display.MovieClip;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    /**
     * ...
     * @author ...
     */
    public class gunner extends MovieClip
    {
        private var _stageRef:Stage;
        public function gunner(stageRef:Stage) 
        {
            _stageRef = stageRef;
            addEventListener(Event.ENTER_FRAME, rotateTurret);
            addEventListener(MouseEvent.CLICK, fireBullet);
        }


        private function rotateTurret(evt:Event):void 
        {
            //calculations, distance, angle etc
            var a:Number = _stageRef.mouseX - this.x;
            var b:Number = _stageRef.mouseY - this.y;
            var angRad:Number = Math.atan2(b, a);
            var angDeg:Number = (angRad * 180 / Math.PI);

            rotation = angDeg;
        }
        private function fireBullet(mouseEvt:MouseEvent):void
        {

            _stageRef.addChild(new bullet(_stageRef, 500,500));
        }
    }

}

класс пули

public class bullet extends MovieClip
{
    //variables
    private var _bulletSpeedVector:Point;
    private var _stageRef:Stage;
    private var _maxX:Number = 1024;
    private var _maxY:Number = 768;
    public function bullet(stageRef:Stage,x:Number,y:Number) 
    {
        _stageRef = stageRef;
        this.x = x;
        this.y = y;
        addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
    }
    private function loop(e:Event) : void
    {
        //move bullet

        /*if (this.x > _maxX || this.x < 0)
            removeSelf();
            else if (this.y > _maxY || this.y < 0)
            removeSelf();
            */
    }
    private function removeSelf() : void
    {
        removeEventListener(Event.ENTER_FRAME, loop);

        if (_stageRef.contains(this))
            _stageRef.removeChild(this);
    }


}

Ответы [ 3 ]

1 голос
/ 20 июля 2011

Судя по всему, вы MouseEvent. Клик будет регистрироваться только в том случае, если вы нажмете на стрелка, а не на основной сцене.Вместо добавления EventListener на наводчик, вы можете зарегистрировать ваш EventListener на сцене.Попробуйте заменить:

addEventListener(MouseEvent.CLICK, fireBullet);

в конструкторе вашего наводчика на:

_stageRef.addEventListener(MouseEvent.CLICK, fireBullet);

Таким образом, fireBullet должен вызываться при каждом нажатии на сцену.Если я прав, щелкнув по стрелку прямо сейчас, он выстрелит в пулю.

0 голосов
/ 20 июля 2011

Я не уверен, почему это происходит, но когда я изменил его на MouseEvent.MOUSE_DOWN, это работает.но с щелчком он не может работать.

0 голосов
/ 20 июля 2011
stage.addEventListener(MouseEvent.CLICK, fireBullet);

и имя класса должно быть написано заглавными буквами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...