是什么阻碍了技能[id]。增值? (JavaScript)的

时间:2012-09-02 20:41:45

标签: javascript

如果我创建了一个名为“Level 0”的按钮,并且我已经运行了LearnSkill(3)它只会增加技能[3]。值为1,然后它会选择一个点击但什么也不做,为什么?

我正在尝试编写一个技能树,我没有因为这样的问题而走得很远所以它基本上是空的。


    var skill = new Array();

    function Skill(value, name, type, tier, column, info, requirement) {
        this.Value = value;
        this.Name = name;
        this.Type = type;
        this.Tier = tier;
        this.Column = column;
        this.Info = info;
        this.Req = requirement;
        //skill[id].Req
    }

    function SkillReq(id, amount, reqby) {
        this.Id = id;
        this.Amount = amount;
        this.By = reqby;
        //skill[id].Req.Id
        //skill[id].Req.Amount
        //skill[id].Req.By
    }

    skill[1] = new Skill(0, "Unholy Sphere", "Tree 2", 0, 1, new Array(), new SkillReq(0, 0, 3));
    skill[3] = new Skill(0, "Dark Circle", "Tree 2", 1, 0, new Array(), new SkillReq(1, 3, 0));

    function canLearn(id) {
        alert("in canlearn");
        canLearn = true;
        return canLearn;
    }

    function canUnlearn(id) {

    }

    function learnSkill(id) {
        alert("id: "+id);
        if (!canLearn(id)) {
            alert("cannot learn");
            return;
        }
        // Increase current skill value
        skill[id].Value++;
        alert(skill[id].Value);
        // totalSP--; Decrease totalSP, must declare first
        // Update button to show new level of skill value
        document.getElementById(id).value = "Level "+skill[id].Value;
    }

    function unlearnSkill(id) {
        if (!canUnlearn(id)) {
            return;
        }
    }

    function onClickTalent(id) {

    }

    function rmbDown(e)
    {
        var isRMB = false;
        e = e || window.event;
        if (e.which)
            isRMB = (e.which == 3);
        else if (e.button)
            isRMB = (e.button == 2);
        return isRMB;
    }

2 个答案:

答案 0 :(得分:0)

我不确定你要做的是什么,但这里有一个问题:

function canLearn(id) {
    alert("in canlearn");
    canLearn = true;
    return canLearn;
}

该函数将在第一次被调用时“自我解析”,因为您将全局符号“canLearn”设置为true。麻烦的是,“canLearn”已经被使用 - 作为该功能的名称!因此,后续尝试调用“canLearn”将失败,因为它的值不再是函数对象。

答案 1 :(得分:0)

您正在覆盖其中的canLearn函数,您指定为true的canLearn标识符是函数本身,要在函数作用域中创建新变量,请使用var关键字

function canLearn(id) {
    alert("in canlearn");
    var canLearn = true;
    return canLearn;
}