0

我正在尝试构建一个简单的 Flash 游戏,用户将草帽拖到仙人掌上。我有它,所以当你将草帽拖到仙人掌以外的任何地方时,它会弹回原来的位置。我有它,所以当你把它拖到仙人掌上时,它就呆在那里。

我想要的是当用户将草帽拖到仙人掌上时,它会将您带到一个屏幕上,上面写着“耶!再玩一次?” 我在 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: Error #2109: Frame label playAgain not found in scene playAgain。在 flash.display::MovieClip/gotoAndPlay() 在 net.dndgtal.Cactus_Game::sombrero/stageUp()

我已经谷歌搜索并检查并仔细检查了所有建议,但无法让它发挥作用。我没有场景“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;
        }

    }



}

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

4

1 回答 1

0

您的问题可能是范围之一。当您使用gotoAndPlay("playAgain")时,它将获取当前时间线(范围),即sombrero类,并尝试在其时间线上找到名为“playAgain”的帧标签或场景。

大概,您希望主时间线转到并播放帧标签“playAgain”,而不是草帽。

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

如果它不是主时间线,而是 sombrero 的父级,您可以使用MovieClip(parent).gotoAndPlay("playAgain")

如果 sombrero 与您尝试推进的任何时间线之间的关系比这更复杂,那么您可以在您的 sombrero 构造函数中传递对它的引用:

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);
于 2014-12-05T22:20:20.113 回答