0

我正在开发一个迷你 html5 游戏,我偶然发现了一个有趣的问题,至少对我来说。这就是写法术公式的方法。例如:

SpellOne = baseDmg + level*dmgPerLvl + ratio*someStat;

那只是一个公式,但我的意思是,很明显,如果我这样写,它会从一开始就计算伤害,而 SpellOne 将只是一个数字,不再是一个公式。我只能想到两种方法来做到这一点,请借给我你的帮助,并给我你对此的任何建议。

SpellOne.baseDmg = 50;
SpellOne.dmgPerLvl = 30;
SpellOne.baseCd = 15; // cd = spell cooldown
SpellOne.CdPerLvl = 2; // cd decreases by 2 every level
SpellOne.baseCost = 50; // mana or whatever resource
SPellOne.CostPerLvl = 20; // increases by 20 each level

然后一旦玩家使用该咒语,它就会计算最新更新:

SpellOneDamage = baseDmg + level*dmgPerLevel 

我有的另一种方法是最近出现在我身上的东西。我有大约 100 个英雄,每个英雄都有十几个属性,然后还有几个法术也有自己的属性。但是一次只能加载 1 或 2 个英雄,所以我是在浪费“资源”还是在 dom 树中添加了许多无用的变量?因为只有 1% 被使用?这让我想到了以下解决方案:

让每个英雄都有一个长函数,当一个人改变他们的英雄时,它会运行该函数,例如,“currentHero”变量会自行获取英雄的所有统计信息,也包括拼写统计信息。所以当这个人再次改变英雄时,真正发生的只是'currentHero'变量改变了它的值,因此你不必毫无意义地加载所有英雄统计数据吗?它仅在选择时加载英雄。各位大侠的任何建议都非常感谢,在此先感谢您!

4

1 回答 1

3

除非你每秒多次重新计算每个法术的伤害,否则为什么不把它变成一个函数并将它添加到你的角色原型中呢?

Character.prototype.getSpellDamage = function(name) {
    var spell = Spells[name];

    return spell.baseDamage
           + this.level * spell.damagePerLevel
           + spell.ratio * this[spell.someStat];
}

现在,您可以将法术存储在一个简单的对象中:

var Spells = {
    'foo bar': {
        baseDamage: 40,
        damagePerLevel: 20,
        ratio: 0.5,
        someStat: 'foo'
    },
    ...
};
于 2013-08-16T20:03:00.873 回答