Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JS中编写大量数据的方法和该数据的公式_Javascript - Fatal编程技术网

Javascript 在JS中编写大量数据的方法和该数据的公式

Javascript 在JS中编写大量数据的方法和该数据的公式,javascript,Javascript,我正在开发一款迷你html5游戏,我偶然发现了一个有趣的问题,至少对我来说是这样。这就是如何写出咒语的公式。例如: SpellOne=baseDmg+level*dmgPerLvl+ratio*someStat 这只是一个公式,但我的观点是,很明显,如果我这样写的话,它会从一开始就计算伤害,拼写一将变成一个数字,不再是一个公式。我只能想到两种方法,请你帮我一下,并给我一些建议 SpellOne.baseDmg = 50; SpellOne.dmgPerLvl = 30; SpellOne.bas

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

SpellOne=baseDmg+level*dmgPerLvl+ratio*someStat

这只是一个公式,但我的观点是,很明显,如果我这样写的话,它会从一开始就计算伤害,拼写一将变成一个数字,不再是一个公式。我只能想到两种方法,请你帮我一下,并给我一些建议

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个英雄,每一个都有大约12个属性,然后有几个法术也有自己的属性。但是一次只能加载1到2个英雄,所以我是在浪费“资源”还是在dom树中添加了许多无用的变量?因为只有1%的人在使用?这让我想到了以下解决方案:


让每个英雄都有一个长函数,当一个人改变他们的英雄时,它会运行这个函数,例如“currentHero”变量会自动获得英雄的所有属性,也会获得法术属性。所以当这个人再次更换英雄时,真正发生的事情就是“currentHero”变量改变了它的值,这样你就不必毫无意义地加载所有英雄数据了?它仅在选中时加载英雄。非常感谢你们提出的任何建议,提前谢谢

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

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'
    },
    ...
};

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

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'
    },
    ...
};

你为什么不做一个函数,在需要时计算损失呢?变量不在DOM树中,它们在内存中。谢谢你,抱歉我的无知。您是否知道这是否只是客户端?或者它也会占用更多的服务器内存吗?如果为真,那么加载所有英雄数据将毫无意义,即使它位于单个对象下。谢谢@Juhana,但这就是我说的“计算他使用咒语时的伤害”吗?除非我误解了你说的为什么你不做一个函数,在需要的时候计算损失?变量不在DOM树中,它们在内存中。谢谢你,抱歉我的无知。您是否知道这是否只是客户端?或者它也会占用更多的服务器内存吗?如果为真,那么加载所有英雄数据将毫无意义,即使它位于单个对象下。谢谢@Juhana,但这就是我说的“计算他使用咒语时的伤害”吗?除非我误解了你说的话,否则我总是问自己,通过实现
calculatedmage(player){}
函数或相反的方法来计算法术的伤害是否是该法术的责任。我猜在这里,咒语必须比玩家了解咒语更多地了解玩家,所以你的方法“耦合性”会更少,但是对我来说,咒语知道如何计算自己的伤害是有意义的。你觉得怎么样?非常感谢你花时间写出来并向我解释,我真的很感激。你认为计算使用法术的伤害更好吗?或者当可以改变法术伤害的属性改变时?我之所以这么问是因为,我想知道是否应该更频繁地更新法术伤害,而不是在关键时刻,比如使用法术时,与升级、更换物品、获得增益等相比?@HateNames:除非
getSpellDamage
是一个瓶颈,否则不要浪费时间优化它。@HateNames,除非您有性能问题,否则我不会试图通过避免每次重新计算损害来过度优化。不过,当公式中的某些内容发生变化时,缓存法术伤害并刷新它肯定会更有效。@Blender,你介意看看我的问题吗?谢谢我总是问自己,通过实现
calculatedmage(player){}
函数或相反的方法来计算法术的伤害是否是法术的责任。我猜在这里,咒语必须比玩家了解咒语更多地了解玩家,所以你的方法“耦合性”会更少,但是对我来说,咒语知道如何计算自己的伤害是有意义的。你觉得怎么样?非常感谢你花时间写出来并向我解释,我真的很感激。你认为计算使用法术的伤害更好吗?或者当可以改变法术伤害的属性改变时?我之所以这么问是因为,我想知道是否应该更频繁地更新法术伤害,而不是在关键时刻,比如使用法术时,与升级、更换物品、获得增益等相比?@HateNames:除非
getSpellDamage
是一个瓶颈,否则不要浪费时间优化它。@HateNames,除非您有性能问题,否则我不会试图通过避免每次重新计算损害来过度优化。不过,当公式中的某些内容发生变化时,缓存法术伤害并刷新它肯定会更有效。@Blender,你介意看看我的问题吗?谢谢