2012-01-05 11 views
0

私は画面上に作成したボックスを削除しようとしています。 としてエクスポートされたボックスがあります。ボックスと船はプレーヤーとしてエクスポートされますが、両方のムービークリップです。as3のマウスクリックでボックスを削除する

1120:未定義のプロパティ_boxのアクセス

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); 
     } 
    } 

それは私にこのエラーを与える:これはコードです。 _box.addEventListener(MouseEvent.CLICK、boxclick);

1120:未定義のプロパティ_boxのアクセス。 removeChild(_box);

誰もが何を間違って知っていますか?あなたがパッケージの}を閉じるのを忘れて

おかげ

答えて

0

あなたが望むが、これを試してみて、どんな質問をすること自由に感じている結果かわかりません。

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

はうまくいくが、唯一の2つのもの(1)別のボックスをクリックする前に別の場所をクリックしなければならない。 (2)(私はこれを言うのを忘れてしまったと思う)私がステージ上の他の場所に再び現れる必要があるボックスをクリックすると。おかげで助けてくれました。 – thor625

+0

その場合、箱を取り除かずに移動してください。関数boxclick(evt:MouseEvent):void { \t \t \t //removeChild(ボックスの現在のターゲット)。 \t \t \t \t \t \t _box = evt.currentTarget; \t \t \t \t \t \t _box.y = Math.random()* stage.stageHeight; _box.x = Math.random()* stage.stageWidth; } – crooksy88

+0

私はそれが動作すると思いますが、私はむしろそれを取り除き、それを動かす代わりに別の場所に追加します – thor625

0
  1. _box_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); 
} 
+0

どのようにグローバルにしても、それを参照するにはどうすればいいですか? – thor625

+0

私の記事を見てください。あなたの場合、それをグローバルにする必要はありません。 – Fabricio

関連する問題