-3

在游戏中,通常能够访问某种菜单。

带有描述的列表、升级菜单、任何带有图片、文字等的内容。

那么有什么方便的方式来组织这一切呢?

当我尝试类时,似乎它们之间不共享变量。
我需要一种在这些窗口/菜单之间共享数据的方法。并且它不应该被数据过度加权,这意味着每次我关闭一个菜单时,它的部分都会消失,以不让 Flash 计算我不需要的 MovieClip 位置、alpha、效果和其他值,使用另一个菜单。

作为一个更好理解的示例,如果我将 5 个游戏合二为一,并且需要在它们之间共享变量怎么办?
说,首先我玩 Arcanoid,然后切换到俄罗斯方块并使用 Arcanoid 分数作为我可以获得的块数,然后切换到弹球并使用俄罗斯方块中得分的线数作为球数,然后切换到 Gradius 和我的船攻击力是弹球分数除以1000,然后我看到一个带有重度胜利烟花效果的总分数窗口。

我需要每个游戏单独工作,否则它们会因为图形和代码长度而变得非常缓慢以查找功能。

这是如何实现的?

谢谢moskito,我有点乱^_^'

4

1 回答 1

2

这是如何实现的?

您创建架构以实现它。您的特定示例可以这样处理:

首先,您要定义这些迷你游戏或单独批次的内容将运行的基础。该基础将处理运行迷你游戏,以及跟踪它们的状态和与它们相关的信息,您希望将这些信息传递给后续的迷你游戏。

其次,您要定义代表这些迷你游戏之一的基类。此类将针对您想要创建并在平台上运行的每个新游戏进行扩展。这个基类将处理通知平台的变化。

最后,您想创建一些模型来表示迷你游戏中的变化状态。内置Event系统是解决此问题的好方法,但您可以在此实例中轻松创建自己的数据模型,然后将其直接传递给平台。


代码示例。

您的平台的基础可能类似于:

public class Platform
{

    private var _game:MiniGame;
    private var _recentGameStateData:GameStateData;


    public function loadGame(game:MiniGame):void
    {
        if(_game != null) game.unload();

        _game = game;
        _game.start(this, _recentGameStateData);
    }


    public function update():void
    {
        if(_game != null) _game.update();
    }


    internal function manageStateChange(gameStateData:GameStateData):void
    {
        _recentGameStateData = gameStateData;

        // Do stuff with the new game state data, like save the current score
        // to use in your next game.
        //
    }

}

你的小游戏:

public class MiniGame
{

    private var _platform:Platorm;
    private var _score:int = 0;


    public function start(platform:Platform, previousGameStateData:GameStateData):void
    {
        _platform = platform;

        // Use previous GameStateData here.
        //
    }


    public function update():void{}
    public function unload():void{}


    public function notifyPlatform(gameStateData:GameStateData):void
    {
        _platform.manageStateChange(gameStateData);
    }


    protected function get score():int{ return _score; }

}

供平台管理的游戏状态数据:

public class GameStateData
{

    private var _game:MiniGame;
    private var _score:int;


    public function GameStateData(game:MiniGame, score:int)
    {
        _game = game;
        _score = score;
    }


    public function get game():MiniGame{ return _game; }
    public function get score():int{ return _score; }

}

然后是在您自己的小游戏中将该信息发送到平台的示例:

public class TetrisGame extends MiniGame
{

    override public function unload():void
    {
        // Let the Platform know about the current score when this game is
        // being unloaded.
        var state:GameStateData = new GameStateData(this, _score);
        notifyPlatform(state);
    }

}
于 2013-02-28T13:15:09.350 回答