Снятие флажка по клику мыши в as3 - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь удалить ящик, который я создал на экране. У меня есть ящик, экспортированный как Ящик, и корабль, экспортированный как игрок, они оба являются видеоклипами.это код:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Main extends MovieClip {

        //playermovevar
        private var _player:MovieClip;
        private var _playerSpeed:Number=5;
        private var _destinationX:int;
        private var _destinationY:int;



        //boxaddvar
        private var boxAmount:Number=0;
        private var boxLimit:Number=20;
        private var _root:Object;

        public function Main() {
            createPlayer();

            //playermovlisten
            stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandlerdown);

            //boxaddlisten
            addEventListener(Event.ENTER_FRAME, eFrame);

            _box.addEventListener(MouseEvent.CLICK, boxclick);


        }

        //playermoving
        private function createPlayer():void {
            _destinationX=stage.stageWidth/2;
            _destinationY=stage.stageHeight/2;

            _player = new Player();
            _player.x=stage.stageWidth/2;
            _player.y=stage.stageHeight/2;
            stage.addChild(_player);
        }


        private function enterFrameHandler(event:Event):void {
            _player.x += (_destinationX - _player.x) / _playerSpeed;
            _player.y += (_destinationY - _player.y) / _playerSpeed;
        }


        private function mouseHandlerdown(event:MouseEvent):void {
            _destinationX=event.stageX;
            _destinationY=event.stageY;
            addEventListener(MouseEvent.MOUSE_UP, mouseHandlerup);

            rotatePlayer();
        }
        private function mouseHandlerup(event:MouseEvent):void {

        }

        private function rotatePlayer():void {
            var radians:Number=Math.atan2(_destinationY-_player.y,_destinationX-_player.x);
            var degrees:Number = radians / (Math.PI / 180) + 90;
            _player.rotation=degrees;
        }
        //boxadding
        private function eFrame(event:Event):void {
            if (boxAmount<=boxLimit) {
                boxAmount++;

                var _box:Box=new Box  ;

                _box.y=Math.random()*stage.stageHeight;

                _box.x=Math.random()*stage.stageWidth;

                addChild(_box);


            } else if (boxAmount >= boxLimit) {
                removeEventListener(Event.ENTER_FRAME, eFrame);
            } else {
                addEventListener(Event.ENTER_FRAME, eFrame);
            }
        }
        function boxclick(event:MouseEvent):void {
            removeChild(_box);
        }
    }

Это дает мне эту ошибку:

1120: доступ к неопределенному свойству _box._box.addEventListener (MouseEvent.CLICK, boxclick);

1120: доступ к неопределенному свойству _box.removeChild (_box);

кто-нибудь знает, что не так?

спасибо

Ответы [ 2 ]

0 голосов
/ 05 января 2012

Не уверен, какие результаты вы хотите, но попробуйте это и не стесняйтесь задавать любые вопросы.

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Main extends MovieClip {

        //playermovevar
        private var _player:Player;
        private var _playerSpeed:Number=5;
        private var _destinationX:int;
        private var _destinationY:int;



        //boxaddvar
        private var boxAmount:Number=0;
        private var boxLimit:Number=20;
        private var _root:Object;

        private var _box:Box;
        private var arrayOfBoxes:Array = new Array(boxLimit);

        public function Main() {
            createPlayer();

            //playermovlisten
            stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseHandlerdown, false, 0, true);

            //boxaddlisten
            addEventListener(Event.ENTER_FRAME, eFrame, false, 0, true);




        }

        //playermoving
        private function createPlayer():void {
            _destinationX=stage.stageWidth/2;
            _destinationY=stage.stageHeight/2;

            _player = new Player();
            _player.x=stage.stageWidth/2;
            _player.y=stage.stageHeight/2;
            stage.addChild(_player);
        }


        private function enterFrameHandler(event:Event):void {
            _player.x += (_destinationX - _player.x) / _playerSpeed;
            _player.y += (_destinationY - _player.y) / _playerSpeed;
        }


        private function mouseHandlerdown(event:MouseEvent):void {
            _destinationX=event.stageX;
            _destinationY=event.stageY;
            addEventListener(MouseEvent.MOUSE_UP, mouseHandlerup, false, 0, true);

            rotatePlayer();
        }
        private function mouseHandlerup(event:MouseEvent):void {

        }

        private function rotatePlayer():void {
            var radians:Number=Math.atan2(_destinationY-_player.y,_destinationX-_player.x);
            var degrees:Number = radians / (Math.PI / 180) + 90;
            _player.rotation=degrees;
        }
        //boxadding
        private function eFrame(event:Event):void {
            if (boxAmount<=boxLimit) {
                boxAmount++;

                _box =new Box();

                _box.y=Math.random()*stage.stageHeight;

                _box.x=Math.random()*stage.stageWidth;

                _box.addEventListener(MouseEvent.CLICK, boxclick, false, 0, true);

                arrayOfBoxes.push(_box);

                addChild(_box);


            } else if (boxAmount >= boxLimit) {
                removeEventListener(Event.ENTER_FRAME, eFrame);
            } else {
                addEventListener(Event.ENTER_FRAME, eFrame, false, 0, true);
            }
        }
        function boxclick(evt:MouseEvent):void {
            removeChild(evt.currentTarget as Box);
        }
    }
}
0 голосов
/ 05 января 2012
  1. Вы забыли закрыть } для пакета.

  2. Ваша переменная _box не существует как глобальный атрибут, но вы пытаетесь получить к нему глобальный доступ.

:)

[править]

Просто удалите эту строку сверху

_box.addEventListener(MouseEvent.CLICK, boxclick);

и поставить его после

var _box:Box=new Box  ;

Затем измените функцию boxclick на:

function boxclick(event:MouseEvent):void {
    var _box:Box = event.currentTarget as Box; // here is your box again

    // make with _box what you want here. Like,

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