我正在使用带有闪光灯的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()
答案 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);
}
}
祝你好运。