我的游戏代码的开头是这样的
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)
将加载一个文本文件。