2014-12-05 31 views
0

我正试图建立一个简单的Flash游戏,用户在仙人掌上拖动宽边帽。我已经掌握了它,所以当你将仙人掌拖到除仙人掌以外的任何地方时,它就会回到它原来的位置。当你将它拖到仙人掌上时,它就保持在那里。gotoAndPlay找不到帧标签AS3

我想要的是,当用户将宽边帽拖到仙人掌上时,它会将您带到一个屏幕上,上面写着“YAY!再玩一次?”我在我的if语句中加入了gotoAndPlay():

if(dropTarget.parent.name == "cactus") 
       { 
        //scaleX = scaleY = 0.2; 
        //alpha = 0.2; 
        //y = stage.stageHeight - height - -100; 

        //buttonMode = false; 
        //removeEventListener(MouseEvent.MOUSE_DOWN, down); 


        gotoAndPlay("playAgain"); 


        trace("dropped on cactus"); 


        } 

        else 
        { 
         returnToOriginalPosition(); 


         } 

我把第二帧标记为“playAgain”。我得到一个错误说: ArgumentError:错误#2109:在场景playAgain中找不到帧标签playAgain。 在flash.display一::影片剪辑/的gotoAndPlay() 在net.dndgtal.Cactus_Game ::草帽/ stageUp()

我用Google搜索,并检查和双重检查所有的建议,但不能让它开始工作。我没有场景“playAgain”,只有“场景1”。我已经尝试指定场景和框架 - 也不起作用。我试图在第二帧中放入gotoAndPlay(2),但那样做什么都不做。

我错过了什么吗?任何帮助,将不胜感激。这里是我所有的代码,如果有帮助:

package net.dndgtal.Cactus_Game 
{ 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.geom.Point; 

public class sombrero extends MovieClip 
{ 

    protected var OriginalPosition:Point; 

    public function sombrero() 
    { 
     OriginalPosition = new Point(x, y); 

     buttonMode = true; 
     addEventListener (MouseEvent.MOUSE_DOWN, down); 

     //trace("sombrero constructor"); 
    } 

    protected function down (event:MouseEvent):void 
    { 
     parent.addChild(this); 
     startDrag(); 
     stage.addEventListener(MouseEvent.MOUSE_UP, stageUp); 

     //trace("DOWN"); 
     } 

     protected function stageUp(event:MouseEvent):void 
     { 
      stage.removeEventListener(MouseEvent.MOUSE_UP, stageUp); 
      stopDrag(); 

      if (dropTarget) 
      { 


       if(dropTarget.parent.name == "cactus") 
       { 
        //scaleX = scaleY = 0.2; 
        //alpha = 0.2; 
        //y = stage.stageHeight - height - -100; 

        //buttonMode = false; 
        //removeEventListener(MouseEvent.MOUSE_DOWN, down); 


        gotoAndPlay("playAgain"); 


        trace("dropped on cactus"); 


        } 

        else 
        { 
         returnToOriginalPosition(); 


         } 

       } 

       else 
       { 
         returnToOriginalPosition(); 
       } 

      } 

    protected function returnToOriginalPosition(): void 
    { 
     x = OriginalPosition.x; 
     y = OriginalPosition.y; 
     } 

    } 



} 

谢谢!如果您有任何问题,请告诉我。

+0

这很难说,但我猜你的脚本在显示树中是错误的地方。我想你想在主时间线上进行导航,但是你的目标是MC时间轴。追踪完整的树形路径,看看你在哪里... – dogsgod 2014-12-05 21:11:53

+0

你找到了解决方案吗?如果以下答案之一导致您的解决方案,请接受答案(复选标记),如果没有,您可以提供自己的答案。 – BadFeelingAboutThis 2014-12-29 17:25:05

回答

-1

我认为你不能直接去使用gotoAndPlay你的类,你的主要舞台的帧2,所以塔,你可以这样做:

package net.dndgtal.Cactus_Game 
{ 
    ... 

    import flash.events.Event 

    public class sombrero extends MovieClip 
    { 
     ... 

     private var __parent:MovieClip 

     public function sombrero() 
     { 
      ... 

      addEventListener(Event.ADDED_TO_STAGE, function(e:Event){ 

       __parent = e.currentTarget.parent 

       ... 

      }) 

      ... 
     } 

     ... 

     protected function stageUp(event:MouseEvent):void 
     {   
      ... 

      __parent.gotoAndPlay(2) // here you can use the frame name if it have one 

      ... 

     } 

    } 

} 
0

你的问题很可能的范围一个。当您使用gotoAndPlay("playAgain")时,它将采用当前时间轴(范围),即sombrero类,并尝试在时间轴上查找名为“playAgain”的帧标签或场景。

推测,您希望主时间轴gotoAndPlay框架标签“playAgain”,而不是宽边帽。

要访问主时间轴,您可以使用MovieClip(root).gotoAndPlay("playAgain")

如果不是主时间轴,而宽边帽的家长,您可以用MovieClip(parent).gotoAndPlay("playAgain")

访问它如果宽边帽和哪个时间表之间的关系你想进步是复杂多了,那么你可以通过在您的阔边帽构造参考吧:

private var targetTimeline:MovieClip; 

public function sombrero (targetTimeline_:MovieClip) 
{ 
    targetTimeline = targetTimeline_; 
    //...rest of constructor code 

然后:

if(dropTarget.parent.name == "cactus"){ 
    targetTimeline.gotoAndPlay("playAgain"); 

当你创建宽边帽,通过目标时间轴:

var hat:sombrero = new sombrero(target);