0

衝突検出をチェックし、Pointオブジェクトを返すことができるメソッドhitTestがあります(衝突が発生した場合)または(衝突がない場合)それが返されますnullまたはundefined(nullまたは未定義が返されるときは深く理解していませんが、信頼していますクロームコンソール)。

2つのオブジェクトで衝突をテストする必要があります。そして、1つまたは2つの衝突が発生しているかどうかを確認します。私はこのコードを試しました:

var result1 = hitTest(player, object1);
var result2 = hitTest(player, object2);
if( result1 || result2 )  { blabla() };

しかし、それは機能しません。

今..私はjsが本当にトリッキーな言語であることを知っています、そして私はtypeof4回書くことなくこれをする賢い方法について考えます。私はPythonの短絡論理演算子について考えています...

4

3 に答える 3

2

を使用でき&&ます。最初に検出された を返しますfalse/null/undefined/0。つまり、またはがifである場合はパスしません。result1result2null

于 2013-02-19T19:25:48.233 に答える
1

for this type of thing, underscore.js is beautifull: http://underscorejs.org/#isNull and http://underscorejs.org/#isUndefined

I use these helpers frequently to get around edge cases in JS such as the ones you mentioned

于 2013-02-19T19:26:54.357 に答える
1

すでに 4 回書き込む必要はありませんがtypeof、とにかく;

条件ステートメントと演算子の強制パラダイム:

//TYPE           //RESULT
Undefined        // false
Null             // false
Boolean          // The result equals the input argument (no conversion).
Number           // The result is false if the argument is +0, −0, or NaN; otherwise the result is true.
String           // The result is false if the argument is the empty String (its length is zero); otherwise the result is true.
Object           // true

モジラから:

論理積 ( &&)

expr1 && expr2
最初のオペランド ( expr1) が に変換できる場合false&&演算子はfalseの値ではなく戻り値を返しますexpr1

論理和 ( ||)

式1 || expr2 に変換できるかどうかを返します。それ以外の場合は を返します。したがって、ブール値で使用すると、いずれかのオペランドが;の場合に true を返します。両方が の場合、 を返します。expr1trueexpr2||truefalsefalse

true || false // returns true
true || true // returns true
false || true // returns true
false || false // returns false
"Cat" || "Dog"     // returns Cat
false || "Cat"     // returns Cat
"Cat" || false     // returns Cat

true && false // returns false
true && true // returns true
false && true // returns false
false && false // returns false
"Cat" && "Dog" // returns Dog
false && "Cat" // returns false
"Cat" && false // returns false

さらに、PHP と同じようにショートカットisset()メソッドを使用して、オブジェクトを適切に検証できます。

function isSet(value) {
    return typeof(value) !== 'undefined' && value != null;
}

そう; あなたのコードは次のようになります。

var result1 = hitTest(player, object1),
    result2 = hitTest(player, object2);
if ( isSet(result1) && isSet(result2) )  { blabla(); };
于 2013-02-19T19:39:11.233 に答える