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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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()

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

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

如果我在这里遗漏了一些关于框架的基本知识,我深表歉意,但即使在查看了一些原始 Phaser.js API 文档之后(因为 dart 端口文档还没有全部完成)我还没有\\'不知道我能做些什么来让它工作。我想还有一个事实是我现在有点"天气不好",所以我现在不想做很多编程工作,但同时我已经把其中一些工作有点太长了,所以我想摆脱这个代码障碍,这样我就可以减少为这个项目工作的动力。

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 变量不为空。我的问题是我应该如何传递该引用?


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

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

那你就可以了

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

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