如何将值传递给相位器(Dart port)State.init()函数



我的游戏代码的开头是这样的

main() {
new Foo();
}
class Foo {
GameMap map;
Foo() {
  map = new GameMap(32, 32); //GameMap is a class of my own
  ... // do some map-related initialisation
  Game game = new Game(800, 600, AUTO, 'canvasDiv');
  State state, state2; 
  state = new FileWaitState(); //explained below
  game.state.add('wait', state);
  game.state.start('wait');
  state2 = new MapRenderState();
  game.state.add('maprender', state2);
}

因此,FileWaitState的想法是,需要运行一个算法来分析用户/播放器提交的文本文件,并且在分析完成之前,我的第二个状态(目前称为MapRenderState不得启动。为了方便这一点,FileWaitState在其update()函数中检查文件是否已给出,如果有,则启动异步。函数调用来分析文件,该文件有一个链接.then(),例如

.then(_) {
  game.state.start('maprender');
}

现在,我的问题是,因为我必须调用分析函数的FileProcessor实例嵌套在GameMap中,我想要一种方法Foo将对map的引用从构造函数传递到FileWaitState。(有点题外话:即使以某种方式或出于某种原因我要重组代码,以便我在这里不需要映射引用,如果可能的话,我会遇到同样的问题MapRenderState。我已经看到 Phaser 的 State 有一个init()函数,它是在新启动状态下调用的第一件事,它允许将可变数量的参数传递到其中。我试图弄清楚的是,我应该如何指定要传递到其中的参数,或者我是否错误地接近了这一点?当然有一种方法可以在那里发送值,对吧?否则 init() 允许任何参数有什么意义?我的意思不是宣布它应该采取什么;显然,我只需要在任何状态类中编写我的 init 实现。我的意思是,回到我的代码,如果我说 init 是取一个 GameMap 类型的参数,那么有没有办法在某处说"当为这个状态调用 init 时,传入这个游戏地图 [来自 Foo ctor] 作为参数"

如果我在这里缺少一些关于框架的基本内容,我深表歉意,但即使在查看了一些原始的 Phaser.js API 文档之后(因为 dart port 文档尚未全部完成),我还没有弄清楚我能做些什么来让它工作。我想还有一个事实是,我现在有点"天气不好",所以我现在不想做很多编程工作,但与此同时,我已经把一些工作放得太久了,所以我想把这个代码障碍排除在外,这样我就可以为这个项目做一些不那么令人沮丧的事情了。

DR 尝试

我有一个状态(FileWaitState),并希望将对游戏地图的引用传递到其 init() 函数中,因为状态的更新函数需要访问游戏地图数据。我的问题是这段代码

map.fileProcessor.analyseTxtFile(ie.files[0])在更新函数给出错误 The null object does not have a getter fileProcessor左右,因为显然我没有传递对 GameMap 的引用以使状态内的 map var 不为空。我的问题是我应该如何传递该引用?

我不太确定你的意思,但是如果你想传递一些东西来初始化一个状态,你可以在状态的构造函数中做到这一点。例如,您的状态构造函数可以是

MapRenderState(this.map){//do something about map}

然后你可以做

game.state.add('render',new MapRenderState(map));
game.state.start('render');
如果要加载处于某种状态的映射

并使用处于相同状态的映射,请在 preload() 中进行加载。我建议使用相位器的加载功能。 game.load.text(key,url)将加载一个文本文件。

最新更新