我正在制作一种资源管理型游戏,我需要一些"收集经理"在我的州和对象之间。我使用的是Typescript。
让我们举例说游戏是关于养猫的。在一种状态下,玩家可以向前跳过一年。当发生这种情况时,我想通过猫的集合并选择成对成为新猫的父母。在另一种状态下,玩家可以喂养10只猫(改变它们的饥饿值)。所以在两个不同的状态下,我需要更新这个猫的集合。
我在每个州内都有这个代码,并且猫的集合通过localStorage(或者有时是Phaser Cache)传递。所以代码变得非常混乱。
所以我想在状态和这个对象集合之间创建一个抽象层。这个东西将负责更新猫,创建新的猫,并根据通过的标准返回猫的子集。我希望这个东西是一个静态层,这样我就不必在状态之间传递它。我希望能够简单地调用以下函数:
catManager.generateNewCats(10);
catManager.getCats({minAge:2, maxAge:5});
catManager.incrementAges();
你会如何组织这个?
答案 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
。如果需要,可以将管理器扩展到缓冲区,如本地存储。