2

現在、ゲームに追加のサウンドを追加しています。問題は、"?...:..." のような省略形の if ステートメントがあり、それに音声を追加する方法がわからないことです。不可能な場合は、クラッシュせずに通常の if ステートメントにする方法を教えてください。

    b.clone().addClass(
    b.data("letter") == target.data("letter") ? "wordglow3" : "wordglow").appendTo("table").css({
        background: "transparent",
        position: "absolute",
        top: currentPos.top,
        left: currentPos.left
    })

したがって、「wordglow3」の場合は「hit.play()」を追加し、「wordglow」の場合は「miss.play()」を追加します

4

2 に答える 2

1

OK、最初に if/else ステートメントを使用した明白な解決策:

var c = b.clone();
if ( b.data("letter") == target.data("letter") ) {
    c.addClass("wordglow3");
    hit.play();
} else {
    c.addClass("wordglow");
    miss.play();
}
c.appendTo(table).css(…);

ここで、変数を使用して重複コードを削除できます。

var className, sound;
if ( b.data("letter") == target.data("letter") ) {
    className = "wordglow3";
    sound = hit;
} else {
    className = "wordglow";
    sound = miss;
}
b.clone().addClass(className).appendTo(table).css(…);
sound.play();

または、デフォルトで初期化することでさらに短くなります。

var className, = "wordglow",
    sound = miss;
if ( b.data("letter") == target.data("letter") ) {
    className += "";
    sound = hit;
}
…

三項演算子の使用は難しくなります。コンマ演算子を使用して、同じ式で異なるアクションを連鎖させることができます。

b.clone().addClass( b.data("letter") == target.data("letter")
  ? hit.play(), "wordglow3"
  : miss.play(), "wordglow"
).appendTo(table).css(…);

しかし、これは醜いです。より良い選択は、条件に変数を使用し、2 つの三項演算子を使用することです。

var success = b.data("letter") == target.data("letter");
b.clone().addClass(success ? "wordglow3" : "wordglow").appendTo(table).css(…);
(success ? hit : miss).play();

ここまで来たら、何百万もの (特にネストされた) if ステートメントをキーによる選択に置き換えるために、サウンドとクラス名の追加のデータ構造を検討することもできます。

// global:
var sounds = { // or use an arrays
    "0": …, // miss
    "1": …  // hit
};
var classes = {
    "0": "wordglow",
    "1": "wordglow3"
};
// […]
// then, select values by casting the boolean to numeric keys:
var success = b.data("letter") == target.data("letter");
b.clone().addClass(classes[+success]).appendTo(table).css(…);
sounds[+success].play();

これにより、他のケースでアプリケーションを簡単に拡張でき、使用されているクラス名またはサウンドがどこでもこのように使用されている場合、(中央の場所で) メンテナンスが容易になります。hitまた、2 つの変数をmiss1 つだけに減らしましたsounds

どのコード スニペットが最も読みやすいか、または状況に最も適しているかを自分で判断してください。

于 2012-10-26T12:53:40.680 に答える
0

つまり、簡単な方法で機能しない場合は、長い方法で試すことができます。

var class_to_add = "wordglow";
if(b.data("letter") == target.data("letter"))
  class_to_add = "wordglow3";
b.clone().addClass(class_to_add).appendTo("table").css({
        background: "transparent",
        position: "absolute",
        top: currentPos.top,
        left: currentPos.left
    });
于 2012-10-26T09:45:40.060 に答える