【发布时间】:2015-03-31 15:08:36
【问题描述】:
我的游戏代码的开头结构是这样的
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 构造函数传递到 @ 987654331@。 (顺便说一句:即使不知何故或出于某种原因我要重组代码以便在这里不需要地图引用,如果可能的话,MapRenderState 也会遇到同样的问题。)我有看到 Phaser 的 State 有一个 init() 函数,这是在新启动状态下首先调用的函数,它允许将可变数量的参数传递给它。我试图弄清楚的是我应该如何指定要传递给它的参数,或者我是否错误地接近这个?当然有一种方法可以在那里发送值,对吧?否则 init() 允许任何参数有什么意义?我的意思不是宣布它应该采取什么措施。显然我只需要在任何 State 类中编写我的 init 实现。我的意思是,回到我的代码,如果我说 init 是采用 GameMap 类型的一个参数,那么有没有办法在某处说“当为此状态调用 init 时,将这个 GameMap [来自 Foo ctor] 作为参数"
如果我在这里缺少有关框架的一些基本内容,我深表歉意,但即使在查看了一些原始 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 var inside 状态不为空。我的问题是我应该如何传递该引用?
【问题讨论】:
-
感谢您的提问!你能做一个tldr版本吗?很难说出你到底在问什么(这里有很多评论:) 尝试以非常清晰的方式重写你的问题,并包括你遇到的错误。你甚至可以使用伪代码来解释你想要做什么。
-
您好,我现在将尝试制作 TLDR..但是哦,是的,我确实忘记了错误。我得到的错误是尝试在 null 对象上调用函数,因为我无法将地图引用传递到我的状态初始化函数中。
-
我认为期待这样一个问题的答案是相当乐观的。似乎您想要做/知道的事情非常基本,但解释涉及很多事情,似乎有必要查看框架的工作原理以了解问题。我建议您尝试简化/澄清问题,并在框架 repo 中创建一个问题,并提供指向此问题的链接,以使开发人员了解您的问题(不确定他/她是否正在监视 SO)。
标签: dart phaser-framework