我以前从未使用过 Flex/Actionscript,所以如果我问任何明显的问题,请原谅我,但在写这篇文章之前,我已经为此工作了 3 天(包括搜索 google 和 stackoverflow)。
我被要求修改使用基于 mini-IoC 的 MVC 框架制作的 Flex 4 游戏。我被要求制作的两个模组是一个游戏结束屏幕,它在介绍屏幕上显示最终得分和难度选择。我已经制作了游戏结束屏幕,并成功地设法让控制器在游戏计时器用完时将其调出。
所以现在,游戏结构如下:
Intro View -> Game View -> Game Over View
^ |
|__________ (retry?) ________|
第一个问题是将分数从 mainGame ActionScript 文件传递到游戏结束屏幕。
我尝试过的事情:
- 在 gameOverViewBase 中导入 mainGame 并调用 gameOverView mxml 文件中的 mainGame.score 变量。
-编辑!!!= 如果我将 mainGame 中的 score 变量更改为常量,则上述方法有效,但如果它仍然是变量,控制器将不会加载 gameOverView 并且游戏位于空的 mainGame 视图中。
- 每当玩家在游戏中得分时,制作一个函数,在 gameOverViewBase 中添加一个新的得分变量。
- MainGame 结束时将分数作为参数传递给 GameOverView
controller.loadGameOver(score);
这似乎是最合乎逻辑的方式。因此,我通过游戏的其他组件设置了 loadGameOver 以将整数作为参数来跟踪该函数,直到我到达主游戏动作脚本文件:
public function loadGameOver(score:int) : void
{
loadView(GameOverView);
}
loadView 函数(如下所示)是我卡住的地方,因为我看不到在哪里传递 'score' 参数。它看起来像这样:
private function loadView(viewClass:Class, modelClass:Class = null) : void
{
var view:View = new viewClass();
if(!view) throw new Error("Could not load view");
viewContainer.removeAllElements();
viewContainer.addElement(view);
view.controller = this;
}
第二个问题是介绍屏幕上的难度选择。我使用 mxml 文件中的 3 个按钮(简单、普通、硬)和 ActionScript 中的每个按钮完成了此操作:
protected function onEasyButtonClick() : void
{
set = "easy"
controller.loadMainGame(set);
}
再一次,我结束了上面的 loadView 函数。
总结一下:我需要知道如何在视图和模型之间传递数据。如果这不是理想的方法,我愿意接受您认为更好的任何其他方法。
谢谢你!
本
PS我可以将我的源代码发送给任何愿意帮助的人:)