试图为游戏添加一些逻辑

Trying to add a bit logic to game

本文关键字:添加 游戏      更新时间:2023-09-26

我有格斗游戏,想增加一些互动,一些能力。这是一个好方法吗?构造函数和所有能力的列表,或者我错过了一些更简单的方法?

var abilityConstructor = function(name, desc, icon, target, param, rate, duration) {
    this.name = name;         // Name of ability
    this.desc = desc;         // Ability's description
    this.icon = icon;         // Ability's icon
    this.target = target;     // If for self usage - 0, if for enemy - 1
    this.param = param;       // Which parameter is influenced (health - 0, damage - 1, speed - 2, missing rate - 3)
    this.rate = rate;         // Factor for dealing (ability's strength) 
    this.duration = duration; // Spells' duration (current round - 1, two rounds - 2, three rounds - 3)
}
// List of available rates for abilities
var lowRate = 0.1;
var midRate = 0.25;
var highRate = 0.5;
var testAbility = new abilityConstructor('Health reduction', 'Reduces health of the opponent for 2 rounds', 'icon_path_here', 1, 0, midRate, 2);

好吧,首先,按照惯例,构造函数最好大写,因为这有助于识别它们,而且通常也不会附加构造函数这个词。

此外,这主要是一种偏好,但当您开始有很多参数时,我更喜欢使用单个dataoptions对象作为参数。

最后,如果您只是在配置上进行复制,您可以通过在配置键上循环来完成。

function Ability(data) {
    for (var k in data) {
        this[k] = data;
    }
}

然而,您可能无法进行太多的泛化,因此您可以像以前那样手动复制值,而不是循环。

function Ability(data) {
    this.name = data.name;
    //...
}

以下是如何调用构造函数:

var testAbility = new Ability({
    name: 'Health reduction',
    ...
});

编辑:

这种结构的优点是,你不必记住参数的顺序,当一些参数可能是可选的时,它也简化了你的生活。您可以简单地省略数据对象中的键,而不是传递未定义的键。这种模式在几乎所有的JavaScript库中都有使用,包括jQuery。但是,由于每次都必须创建一个数据对象,因此您将略微牺牲性能。如果性能是一个真正的问题,我强烈建议您尝试这种模式,并放弃最初的解决方案。