AS3 - 得分计数器

时间:2015-06-13 09:57:21

标签: actionscript-3

我正在制作一个四帧的简单数学游戏。在第一帧中,您可以选择要练习的数学运算。在第二帧中,您将看到随机生成的数学问题。如果输入正确答案,应用程序将输出“正确答案”,并跳回第一帧。每个正确答案都得到一分。保持分数并将其输出到屏幕上的最简单方法是什么?

2 个答案:

答案 0 :(得分:2)

老实说,几乎每个问题的答案都包括“......带......框架...”,要求最简单/最好/理智的做法是“没有框架”。

无论何时切换帧,都会执行该帧上的所有代码。如果再次访问框架,则会再次执行代码。如果您在第一帧上将分数设置为0,则无论何时再次转到该帧,都会将分数重置为0.

就分数而言,最简单的方法是仅初始化一次。根据上面提到的事情,这意味着你永远不应该访问那个将得分再次设置为0的框架。

您可以通过两种方式执行此操作:

  1. 将你的第一帧分成两帧:两者看起来相同,第一帧进行初始化,每当你想“回到第一帧”时,你实际上转到第二帧
  2. 您不使用多个帧:获取每个帧的内容并将其放入自己的符号(MovieClip)。您可以在显示列表中添加/删除这些MovieClip,而不是在帧之间切换。
  3. 我推荐2,因为这是更好的方式。但是1更容易做到。

答案 1 :(得分:-1)

首先要放弃框架逻辑并开始推理类和组件。在面向对象的编程中,有很多方法可以做你想要的。这是一个架构问题。一种方法是将主应用程序的引用传递给运行"测验帧"的类(或函数)。您应该实现saveScore(score:int):void方法,这样当测验结束时,您的方法可以调用这个新的saveScore()方法来更新分数。

这是您的主应用程序代码与测验框架代码之间的严格关系。在一个简单的情况下,这应该是有用的,它不是一个问题,但一般来说总是更好的组件松散耦合(https://en.wikipedia.org/wiki/Loose_coupling),因为你永远不知道你将来需要什么,也许有一天您必须更改整个体系结构,并且连接的组件越少,依赖性就越容易改变(重构)。

我通常选择为每个应用(https://en.wikipedia.org/wiki/Singleton_pattern)或某个共享位置设置一个单例来保存可从我的应用程序的每个类访问的数据。

例如,你可以使用这样的类:

class Registry{
    public private static var _score:int;

    public static setScore(score:int):void{
        Registry._score = score;
    }

    public static getScore():int{
        return Registry._score;
    }
}

在程序的任何地方,您都可以调用Registry.setScore(10)和Registry.getScore()。这对您有很大帮助,因为您的程序中的组件并不了解彼此,并且他们不知道哪些方法是暴露的,他们只需要知道注册表。