Javascript:你如何输入未知变量?

时间:2015-12-15 08:47:17

标签: javascript

我制作的游戏中玩家可以选择3个不同的角色。然而,我遇到了一个明显的问题,那就是,当我创建一个函数(如攻击函数)时,它只链接到一个特定的字符。

我宁愿让我的代码写在人们选择角色的地方,所有人都可以使用相同的攻击技能,而不必编写3个不同的。此外,攻击技能与按钮相关联,因此它必须是多样的。

我无法为X播放器设置指定的攻击按钮。那么如何创建我的代码以便它可以添加所有字符而不仅仅是1个指定的字符?

示例:查看下面的警示攻击功能。我可以把它设置为矮人&天使很好。但是,如果玩家选择一个ELF角色呢?然后该功能将无效,因为它认为角色是矮人,与天使战斗。我该如何解决这个问题?

New=Object.create;

actor = {
    primaryStats: function (level, hp, hpcap, balance, balancecap, exp){
        this.level = level;
        this.hp = hp;
        this.hpcap = hpcap;
        this.balance = balance;
        this.balancecap = balancecap;
        this.exp = exp;
},

player = New (actor),
monster = New (actor),

dwarf = New(player),
human = New(player),
elf = New(player),

angel = New(monster),
demon = New(monster),
dragon = New(monster);

//ATTACK SKILL ONE
dom.el("strike").onclick = function strike() {

    playerHitCalc(dwarf, angel);
    };   

    playerHitCalc = function(character, boss){
        roll = Math.floor(Math.random() * character.accuracy + 1);
        if (roll > boss.agility){
            var hit = true;
        }
        else {
            hit = false;
            logMessage(boss.ID + " " + "has evaded your attack!")
        }
        playerDamCalc = function(){
            if (hit == true){ //If you score a successful hit
                var damage = Math.floor(Math.random() * character.strength + 1);
                var totalDamage = damage - boss.armor; // Subtract Damage from Bosses Armor
                if(totalDamage <= 0)totalDamage += boss.armor; // Add boss armor to prevent Negative Numbers
                boss.hp -= totalDamage; // Subtract bosses HP from damage.
                character.exp += totalDamage * 0.25; // Gain 1 exp point per 4 damage done
                dom.setText("bosshealthcounter", boss.hp) // Update Bosses Health
                logMessage("You hit " + boss.ID + " for " + totalDamage + " damage!");
            }

2 个答案:

答案 0 :(得分:0)

您可以使用数据属性将dom元素链接到特定字符。例如 -

 <button class="attack-btn" data-attacker="dwarf" data-target="angel">Attack</button>

然后在点击处理程序中,您可以提取特定元素的属性攻击者目标,而不是对值进行硬编码。

希望有所帮助!

答案 1 :(得分:0)

您正在做的一件事是从Player创建MonsterActor,然后从Player创建特定的玩家类,并为怪物创建相同的玩家类。

问题在于,现在每个类型的玩家和每种类型的怪物都有一个特定的手柄。

如果我们想要修改当前代码,您必须添加currentPlayercurrentMonster个变量,这些变量将等于您想要的PlayerMonster斗争。然后,您可以避免引用特定的player和特定的monster,并使用

playerHitCalc(currentPlayer, currentMonster);

但我建议稍微改变一下,create objects in a little different way.