0

「Level 0」という名前のボタンを作成し、onmousedown で LearnSkill(3) を実行すると、skill[3].Value が 1 にインクリメントされるだけで、クリックは検出されますが何もしません。なぜですか?

私はスキルツリーをコーディングしようとしていますが、このような問題のためにあまり進んでいないので、ほとんど空です.

    var スキル = new Array();

    function Skill(値、名前、タイプ、階層、列、情報、要件) {
        this.Value = 値;
        this.Name = 名前;
        this.Type = タイプ;
        this.Tier = ティア;
        this.Column = 列;
        this.Info = 情報;
        this.Req = 要件;
        //skill[id].Req
    }

    function SkillReq(id, amount, reqby) {
        this.Id = id;
        this.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, "ダーク サークル", "ツリー 2", 1, 0, new Array(), new SkillReq(1, 3, 0));

    関数 canLearn(id) {
        alert("in canlearn");
        canLearn = true;
        戻ることができます。
    }

    関数 canUnlearn(id) {

    }

    関数 LearnSkill(id) {
        アラート("id:"+id);
        if (!canLearn(id)) {
            alert("学習できません");
            戻る;
        }
        // 現在のスキル値を増加
        スキル[id].Value++;
        アラート(スキル[id].値);
        // totalSP--; totalSP を減らします。最初に宣言する必要があります
        // 新しいレベルのスキル値を表示する更新ボタン
        document.getElementById(id).value = "レベル "+skill[id].Value;
    }

    関数 unlearnSkill(id) {
        if (!canUnlearn(id)) {
            戻る;
        }
    }

    関数 onClickTalent(id) {

    }

    関数 rmbDown(e)
    {
        var isRMB = false;
        e = e || window.event;
        if (e.which)
            isRMB = (e.which == 3);
        else if (e.button)
            isRMB = (e.button == 2);
        返品は人民元です。
    }

4

2 に答える 2

0

あなたが何をしようとしているのかよくわかりませんが、ここに1つの問題があります:

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

グローバルシンボル「canLearn」を に設定しているため、その関数は最初に呼び出されたときに「自己宣言」しtrueます。問題は、「canLearn」が既に使用されていることです-その関数の名前として! したがって、その後の「canLearn」の呼び出しは、その値が関数オブジェクトではないため失敗します。

于 2012-09-02T20:48:34.307 に答える
0

canLearnその中で関数を上書きしていますcanLearn。true に割り当てる識別子は関数自体です。関数スコープで新しい変数を作成するには、var キーワードを使用します。

function canLearn(id) {
    alert("in canlearn");
    var canLearn = true;
    return canLearn;
}
于 2012-09-02T20:48:49.137 に答える