如何在另一个movieclip中的movieclip中调用gotoAndStop?

时间:2013-04-10 23:44:05

标签: actionscript-3 flash

我正在使用带有闪光灯的World Construction Kit来制作基于物理的游戏。我有一个影视剪辑作为世界。我正在创建一个平台游戏,现在,当玩家接触到目标时,它会将它们发送到主菜单,每个级别都在影片剪辑中的不同帧上,菜单就是。

这是玩家触及目标时的代码

public function handleContact(e:ContactEvent):void {

        var g:goal = e.other.m_userData as goal;
        if (g) {
            trace(g.x + ", " + g.y);
            MovieClip(parent).gotoAndStop(2);
        }

代码可以转到关卡动画片段中的下一帧,但是如何让它上升到一个等级,以便它可以返回主时间轴上的主菜单?

编辑:当我尝试parent.MovieClip(parent).gotoAndStop(2);影片剪辑(父).parent.gotoAndStop(2);给我错误1061:通过静态类型flash.display的引用调用可能未定义的方法MovieClip:DisplayObjectContainer。

当我尝试MovieClip(父).MovieClip(父).gotoAndStop(2);时,它编译,但当我联系目标时,我收到此错误:

TypeError: Error #1006: MovieClip is not a function.
    at fred/handleContact()[C:\Documents\sdrVG\fred.as:85]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at Box2DAS.Common::b2EventDispatcher/dispatchEvent()[C:\API\wck-master\wck-master\Box2DAS\Common\b2EventDispatcher.as:27]
    at Box2DAS.Dynamics::b2ContactListener/ContactDispatch()[C:\API\wck-master\wck-master\Box2DAS\Dynamics\b2ContactListener.as:65]
    at Box2DAS.Dynamics::b2ContactListener/BeginContact()[C:\API\wck-master\wck-master\Box2DAS\Dynamics\b2ContactListener.as:31]
    at Box2DAS.Dynamics::b2World/BeginContact()[C:\API\wck-master\wck-master\Box2DAS\Dynamics\b2World.as:346]
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at global/AS3_CallTS()
    at Function/http://adobe.com/AS3/2006/builtin::apply()
    at Function/<anonymous>()
    at cmodule.Box2D::FSM__ZN13WorldListener12BeginContactEP9b2Contact/work()

2 个答案:

答案 0 :(得分:0)

Event capturing and bubbling可以解除对显示列表中对象的认识。

你可以介绍一个游戏事件类,实现如下:

package
{
    import flash.events.Event;

    public class GameEvent extends Event
    {
        public static const NEXT_LEVEL:String = "NEXT_LEVEL";

        public function GameEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
    }
}

从您的播放器影片剪辑实例中,您可以发送此事件,这些事件会通过父母冒充,直到被捕获为止。例如,来自您的handleContact(e:ContactEvent)函数调用:

dispatchEvent(new GameEvent(GameEvent.NEXT_LEVEL));

可以通过添加侦听器来处理事件,从而在主类中处理此事件。

倾听NEXT_LEVEL事件:

addEventListener(GameEvent.NEXT_LEVEL, nextLevelHandler);

在下一级游戏事件中,创建一个处理函数:

protected function nextLevelHandler(event:GameEvent):void
{
    gotoAndStop(2);
}

答案 1 :(得分:0)

尝试将MovieClip(this.parent)添加到您的函数中,如此

public function handleContact(e:ContactEvent):void
{
      var g:goal = e.other.m_userData as goal;

      if (g)
      {
            trace(g.x + ", " + g.y);
            MovieClip(this.parent).gotoAndStop(2);
      }
}

祝你好运。