【问题标题】:How to Organize Code in a Resource Management Phaser Typescript Project?如何在资源管理 Phaser Typescript 项目中组织代码?
【发布时间】:2016-05-24 23:57:31
【问题描述】:

我正在制作一种资源管理类型的游戏,我需要在我的状态和对象之间设置某种“收集管理器”。我正在使用打字稿。

比如说,这个游戏是关于养猫的。在一种状态下,玩家可以向前跳一年。发生这种情况时,我想通过收集猫并选择成对成为新猫的父母。在另一种状态下,玩家可以喂 10 只猫(改变它们的饥饿值)。所以在两种不同的状态下,我需要更新这个猫的集合。

我在每个州都有这段代码,猫的集合通过 localStorage(或者有时是 Phaser Cache)传递。所以代码变得相当混乱。

所以我想在状态和这个对象集合之间创建一个抽象层。这个东西将负责更新猫,创建新猫,并根据通过的标准返回猫的子集。我希望这个东西成为一个静态层,这样我就不必在状态之间传递它。我希望能够简单地调用如下函数:

catManager.generateNewCats(10);
catManager.getCats({minAge:2, maxAge:5});
catManager.incrementAges();

你会如何组织这个?

【问题讨论】:

    标签: typescript phaser-framework


    【解决方案1】:

    这是一种可能的解决方案:

    /** Creates a Guid (UUID v4) */
    function createId(): string {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    }
    
    
    class Cat {
        id: string;
        constructor() {
            this.id = createId();
        }
    }
    class Manager {
        cats: {}
        getNew(howMany: number): Cat[] {
            const result: Cat[] = [];
            for (let index = 0; index < howMany; index++) {
                const cat = new Cat();
                this.cats[cat.id] = cat;
            }
            return result;
        }
    
    }
    
    export const manager = new Manager();
    

    您始终可以通过其 ID 识别 cat。如果需要,您可以扩展管理器以缓冲到本地存储等位置。

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 2021-05-13
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      • 2010-11-26
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多