1

我正在使用带有 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); MovieClip(父).parent.gotoAndStop(2); 给我错误 1061:通过静态类型 flash.display:DisplayObjectContainer 的引用调用可能未定义的方法 MovieClip。

当我尝试 MovieClip(parent).MovieClip(parent).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()
4

2 回答 2

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);
      }
}

好运。

于 2013-04-12T19:58:34.047 回答
0

事件捕获和冒泡可以将显示列表上的对象的感知解耦。

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

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);
}
于 2013-04-11T01:45:07.157 回答