如何将值传递给移相器(Dart 端口)State.init() 函数?

How to pass values to phaser (Dart port) State.init() function?

我的游戏代码的开头结构如下

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 的想法是算法需要 运行 分析 user/player 提交的文本文件,直到分析完成我的第二个状态,目前称为MapRenderState 不能启动。为方便起见,FileWaitState 在其 update() 函数中检查文件是否已提供,如果已提供则启动异步。分析文件的函数调用,其中有一个 .then() 链接到它上面,如

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

现在,我的问题是因为我必须调用分析函数的 FileProcessor 实例嵌套在 GameMap 中,我想要一种方法来传递对地图的引用Foo 构造函数变为 FileWaitState。 (顺便说一句:即使我以某种方式或出于某种原因重组代码,以便在这里不需要地图引用,如果可能的话,我也会遇到与 MapRenderState 相同类型的问题。)我已经看到 Phaser 的 State 有一个 init() 函数,这是在新启动的状态下首先要调用的函数,它允许将可变数量的参数传递给它。我想弄清楚的是我应该如何指定要传递给它的参数,或者我是否错误地处理了这个问题?当然有一种方法可以在那里发送值,对吧?否则 init() 允许任何参数有什么意义?我的意思不是宣布它应该采取什么;显然,我只需要在任何状态 class 中编写我的 init 实现。我的意思是,回到我的代码,如果我说 init 是接受一个 GameMap 类型的参数,那么有没有办法在某个地方说 "when calling init for this State, pass in this GameMap [from Foo ctor] as the arg"

如果我在这里遗漏了关于框架的一些基本知识,我深表歉意,但即使在查看了一些原始的 Phaser.js API 文档之后(因为 dart 端口文档并不是全部完成)我还没有想出我能做些什么来让它工作。我想还有一个事实是我现在有点 "under the weather",所以我现在不想做大量的编程工作,但与此同时我已经把其中的一些工作搁置了有点太长了,所以我想把这个代码障碍排除在外,这样我就不会因为这个项目而感到沮丧。

TL;DR 尝试

我有一个 State (FileWaitState) 并且想将对 GameMap 的引用传递到它的 init() 函数中,因为 State 的更新函数需要访问 GameMap 数据。我的问题是这段代码

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

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

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

那么你可以

game.state.add('render',new MapRenderState(map));
game.state.start('render');

如果您想在一个状态下加载地图并在同一状态下使用地图,请在 preload() 中进行加载。我推荐使用移相器的加载功能。 game.load.text(key,url) 将加载一个文本文件。