gotoAndPlay找不到帧标签AS3

时间:2014-12-05 19:30:59

标签: ios string actionscript-3 flash droptarget

我正在尝试构建一个简单的Flash游戏,用户将宽边帽拖到仙人掌上。我已经得到了它,当你将松墨布拖到仙人掌的任何地方时,它会回到原来的位置。我把它拖到仙人掌上,它就在那里。

我想要的是当用户将宽边帽拖到仙人掌上时,它会将您带到一个屏幕上,上面写着“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 :: MovieClip / gotoAndPlay()     在net.dndgtal.Cactus_Game :: sombrero / stageUp()

我已经Google搜索并检查并仔细检查了所有建议,但无法使其正常工作。我没有场景“playAgain”,只有“scene1”。我已经尝试指定场景和帧 - 这两者都不起作用。我尝试将第二帧放入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;
        }

    }



}

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:-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

            ...

        }

    }

}