1

数日前、仲間と一緒にプレイするBroken Historyというゲームのロードジェネレーターを作成しました。自分でコードを開始しましたが、コードを完成させるために助けを得ることになりました。

次に、以前とまったく同じ方法を使用して、同じゲームのchar genを作成することに着手しました。すべての要素が想定どおりに機能し、すべてが良好に見えました。ただし、変数curFactionが最初に呼び出されたときに結果のテキストを取得したときundefined、ユーザーが選択ボックスで選択した派閥を2回目に読み取ったときに読み取られましたSaxathia。変数は$(document).ready()関数で割り当てられるので、理論的には、正しく呼び出される前に割り当てる必要がありますか?

なぜこれが起こるのか私には考えられません、変数は配列の一部として呼び出されますそれは何か違いがありますか?

ここに画像の説明を入力してください

これがjsLinthttp : //jsfiddle.net/CYe8J/31/です。

4

1 に答える 1

1

問題は、ユーザーが派閥を選択する前に、ページが読み込まれるときに文字の説明文字列を設定していることです。

// curFaction is undefined here, as user cannot select a faction 
// *before* the page is loaded!!
var aLevel[1] = "Description1 of guy from " + curFaction + ".";

最も簡単な修正は、必要に応じて説明を生成することです。これを行う1つの方法はaLevel、次のように、文字列ではなく、に関数を格納することです。

var aLevel[1] = function () { "Description1 of guy from " + curFaction + "."; };
var aLevel[2] = function () { "Description2 of guy from " + curFaction + "."; };
var aLevel[3] = function () { "Description3 of guy from " + curFaction + "."; };

次に、説明が必要な場合は、関数を呼び出します。

// Original code:
"Stuff about claim on throne. " + aLevel[temp6] + ".";

// New code - note brackets after "aLevel[temp6]"
"Stuff about claim on throne. " + aLevel[temp6]() + ".";

これを示すフィドルを作成しました

余談ですが、コードは一般的にかなりリファクタリングされる可能性があります-原則として、同じアルゴリズムを何度も書いていることに気付いた場合は、DRYの原則を覚えておく必要があります:)

于 2012-10-04T09:48:21.340 に答える