如何在资源管理Phaser Typescript项目中组织代码?

时间:2016-05-24 23:57:31

标签: typescript phaser-framework

我正在制作一种资源管理型游戏,我需要一些"收集经理"在我的州和对象之间。我使用的是Typescript。

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

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

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

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

你会如何组织这个?

1 个答案:

答案 0 :(得分: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。如果需要,可以将管理器扩展到缓冲区,如本地存储。