所以我在做一个游戏,决定做一个可切换的游戏场景。我有一个Matter. Engine的例子,我在这里切换世界参数到当前场景的世界参数。
在类"App"中,它看起来像这样。
constructor() {
App.Engine = Matter.Engine.create();
Matter.Runner.run(App.Engine);
}
public static switchScene(sceneId: string): void {
this._currentScene = this._scenes.find((scene) => scene.name == sceneId);
App.Engine.world = this._currentScene.world;
}
在Scene类中
this.world = Matter.World.create({} as IWorldDefinition);
1条答案
按热度按时间uqcuzwp81#
engine.world = scenes[sceneIndex].world;
是一个很好的尝试,但即使这是一个公共属性,我还没有见过直接设置它之前。它似乎是绕过API和破坏引擎的状态。请随时纠正我,如果我发现更多的确定性信息,我会更新这一点。与此同时,如果您的设计支持它,我建议使用类似MJS demo page的方法,并为每个场景提供自己的引擎,还可能提供渲染器和画布(渲染器和运行器是用于演示的,所以你可能有一个uses MJS headlessly的自定义渲染解决方案)。每当你改变到一个不同的场景时,演示会重置每个场景的状态,但是您可以使用
runner.enabled
暂停场景并重新启动它,如下所示,或者如果您正在无头运行,则可以在Matter.Engine.update(engine);
调用中特定于场景的不同engine
对象之间切换(或者使用其自己的update
调用和engine
暂停/恢复单独的动画循环)。