如何将值传递给移相器(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)
将加载一个文本文件。
我的游戏代码的开头结构如下
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)
将加载一个文本文件。