2015-12-15 57 views
-2

不工作,我有我的,我在其他类添加EventLisitener到精灵像这样的主类:添加事件监听到精灵在其他类AS3

public function Main() { 
    if (stage) init(); 
    else addEventListener(Event.ADDED_TO_STAGE, init); 

    addChild(Menu.menuBackground); 
    addChild(Menu.startButton); 
    //Adds event Listener to Menu's Sprite startButton. 
    Menu.startButton.addEventListener(MouseEvent.CLICK, startGame); 
} 

private function init(e:Event = null):void { 
    removeEventListener(Event.ADDED_TO_STAGE, init); 
} 

这一切工作非常愉快,但后来我试着以同样的方式再做一遍。但是,点击这些精灵不会做任何事情。这是完整的主类代码。与其他三个Sprite类的代码一起。

全部主营:

package { 

    //Other Files 
    import Menu; 
    import CrossHair; 
    import Birds; 

    import flash.display.Bitmap; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 
    import flash.ui.Mouse; 

    public class Main extends Sprite { 

     //Game values 
     public static var gameWidth:int = 750; 
     public static var gameHeight:int = 750; 

     [Embed (source = "lib/background.png")] 
     public var backgroundClass:Class; 
     public var background:Bitmap = new backgroundClass(); 

     public function Main() { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 

      addChild(Menu.menuBackground); 
      addChild(Menu.startButton); 
      Menu.startButton.addEventListener(MouseEvent.CLICK, startGame); 
     } 

     private function init(e:Event = null):void { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     //Function starts game 
     public function startGame(Evt:Event):void { 
      Mouse.hide(); //Hides Mouse 

      removeChild(Menu.startButton); //Get rid of startButton 
      Menu.startButton.removeEventListener(MouseEvent.CLICK, startGame); 
      reRender(); 

      //Add eventListiners 
      addEventListener(Event.ENTER_FRAME, update); 
      Birds.bird.addEventListener(MouseEvent.CLICK, Birds.shot); 
      EnterShopButton.shopButton.addEventListener(MouseEvent.CLICK, enterShop); 
     } 

     public function reRender():void { 
      addChild(background); //Add background 
      addChild(Birds.bird); //Add birds. 
      addChild(EnterShopButton.shopButton); //Add UpgradeMenuButton 
      addChild(CrossHair.crossHair); //Add crosshair 
     } 

     public function enterShop():void { 
      stage.removeChildren(); //Removes all children from stage. 
     } 

     public function update(evt:Event):void { 
      Birds.update(); 

      CrossHair.crossHair.x = mouseX - (CrossHair.crossHairImg.width/2); 
      CrossHair.crossHair.y = mouseY - (CrossHair.crossHairImg.height/2); 
     } 


    } 

} 

事件Lisitners:

package { 

    //Other files 
    import flash.events.Event; 
    import Main; 

    import flash.display.Sprite; 
    import flash.display.Bitmap; 

    public class Menu extends Sprite { 

     //create menbu background Bitmap 
     [Embed (source = "lib/menubackground.png")] 
     public static var menuBackgroundClass:Class; 
     public static var menuBackground:Bitmap = new menuBackgroundClass(); 

     //create startButton Bitmap 
     [Embed (source = "lib/menustartbutton.png")] 
     public static var startButtonClass:Class; 
     public static var startButtonImg:Bitmap = new startButtonClass(); 
     public static var startButton:Sprite = new Sprite(); 

     //Set startButton's values 
     startButton.addChild(startButtonImg); 
     startButton.x = (Main.gameWidth/2) - (startButtonImg.width/2); 
     startButton.y = (Main.gameHeight/2) - (startButtonImg.height/2); 
    } 
} 

package { 

    //Other files 
    import Main; 

    import flash.display.Sprite; 
    import flash.display.Bitmap; 
    import flash.events.MouseEvent; 

    public class Birds extends Sprite { 

     public static var xSpeed:int = 10; 
     public static var ySpeed:int = 10; 
     public static var dead:Boolean = false; 

     //Create bird Sprite 
     [Embed (source = "lib/bird.png")] 
     public static var birdClass:Class; 
     [Embed (source = "lib/birdead.png")] 
     public static var deadBirdClass:Class; 
     public static var birdImg:Bitmap = new birdClass(); 
     public static var deadBirdImg:Bitmap = new deadBirdClass(); 
     public static var bird:Sprite = new Sprite(); 

     //Sets Sprite's values 
     bird.addChild(birdImg); 
     bird.buttonMode = true; 
     bird.x = 0; 
     bird.y = 0; 

     public static function update():void { 
      bird.x += Math.random() * xSpeed; 
      bird.y += Math.random() * ySpeed; 
      if (!dead) { 
       if (bird.x >= (Main.gameWidth - birdImg.width) || bird.x <= 0) { 
        xSpeed = xSpeed * -1; 
       } 
       if (bird.y >= (Main.gameHeight - birdImg.height) || bird.y <= 0) { 
        ySpeed = ySpeed * -1; 
       } 
      } else { 
       if (bird.y > (Main.gameHeight - deadBirdImg.height)) { 
        resetBird(); 
       } 
      } 
     } 

     public static function shot(evt:MouseEvent):void { 
      if (!dead) { 
       bird.removeChild(birdImg); 
       bird.addChild(deadBirdImg); 
       dead = true; 
       xSpeed = 0; 
       ySpeed = 50; 
      } 
     } 

     public static function resetBird():void { 
      bird.removeChild(deadBirdImg); 
      bird.addChild(birdImg); 
      dead = false; 
      bird.x = 0 
      bird.y = 0; 
      xSpeed = 10; 
      ySpeed = 10; 
     } 

    } 

} 


package { 

    //Other Files 
    import Main; 

    import flash.display.Sprite; 
    import flash.display.Bitmap; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class EnterShopButton extends Sprite{ 

     //Create crossHair 
     [Embed (source = "lib/shopbutton.png")] 
     public static var shopButtonClass:Class; 
     public static var shopButtonImg:Bitmap = new shopButtonClass(); 
     public static var shopButton:Sprite = new Sprite(); 

     //Set CrossHair's values 
     shopButton.addChild(shopButtonImg); 
     shopButton.buttonMode = true; 
     shopButton.x = Main.gameWidth - shopButtonImg.width; 
     shopButton.y = Main.gameHeight - shopButtonImg.height; 

    } 

} 
+0

看到您的其他问题(http://stackoverflow.com/questions/34256441/as3-debugger-stops-responding-while-trying-to-load-image-into- sprite-using-loade),似乎你并没有真正接受答案。当你继续做同样的事情时,不要指望人们继续帮助你,并期待它突然发挥作用。 我建议你根据你的其他问题的答案修改你的代码,如果这给你任何问题,随时张贴他们,人们会很乐意帮助你。 祝你好运! –

回答

0

同样的问题,同样的答案。你以前的问题的答案是一样的,但你仍然坚持做同样的事情,并陷入完全相同的问题。

停止尝试在静态范围内运行代码! addChild不能在该范围和任何其他类型的代码中工作。

不知道为什么我被拒绝了。这里没有太多可以回答的地方,因为同一个用户的问题在另一篇文章中得到了回答。

这真的不难,用户想要在类定义范围运行代码。在类定义范围内,你可以实例化变量yes,但这是你所能做的。用户想要在该范围内运行代码和逻辑,并且这完全被编译器忽略。在他之前的问题中已经指出了这一点,他甚至给出了建议,停止在该范围内运行代码以避免进一步的问题。这是非常简单的理解:

[Embed (source = "lib/menubackground.png")] 
    public static var menuBackgroundClass:Class; 
    public static var menuBackground:Bitmap = new menuBackgroundClass(); 
    //instantiation is allowed at that scope and will work 

    //create startButton Bitmap 
    [Embed (source = "lib/menustartbutton.png")] 
    public static var startButtonClass:Class; 
    public static var startButtonImg:Bitmap = new startButtonClass(); 
    //instantiation is allowed at that scope and will work 
    public static var startButton:Sprite = new Sprite(); 
    //instantiation is allowed at that scope and will work 

    //COMPILER WILL IGNORE AT THAT SCOPE ANY CODE THAT IS NOT INSTANTIATION 
    //SO ALL FOLLOWING LINES ARE IGNORED AND PRODUCE NO RESULT 
    //EVEN TRACING WOULD NOT WORK HERE 
    // (Main.gameWidth/2) WILL NOT BE CALCULATED AND DOES NOT PRODUCE ANY VALUE 
    // startButton.x WILL NOT BE SET AND WILL STAY AT DEFAULT VALUE 0 
    // FINALLY startButton WILL NOT addChild ANYTHING. 
    //ANY FORM OF CODE LOGIC IS IGNORED AT THAT SCOPE AND WILL NEVER PRODUCE ANY RESULT 
    startButton.addChild(startButtonImg); 
    startButton.x = (Main.gameWidth/2) - (startButtonImg.width/2); 
    startButton.y = (Main.gameHeight/2) - (startButtonImg.height/2); 
+0

请在回答之前进行编译和检查。如果你要阅读我的答案,你会发现在编译startButton的时候完美的工作。 x和y属性完美地工作。这些不是我的问题。这些变量的静态状态没有影响,你可以在编译时看到。请重新阅读我的问题,并正确回答。 –