【发布时间】:2012-07-07 10:46:37
【问题描述】:
我以前从未使用过 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 文件和 ActionScript 中的每个按钮上使用了 3 个按钮(简单、普通、硬):
protected function onEasyButtonClick() : void
{
set = "easy"
controller.loadMainGame(set);
}
再一次,我结束了上面的 loadView 函数。
总结一下:我需要知道如何在视图和模型之间传递数据。如果这不是理想的方法,我愿意接受您认为更好的任何其他方法。
谢谢!
本
附:我可以将我的源代码发送给任何愿意提供帮助的人:)
【问题讨论】:
标签: apache-flex model-view-controller actionscript mxml