LoginSignup
3
3

More than 5 years have passed since last update.

enchant.jsの当たり判定(intersect())について

Last updated at Posted at 2014-12-14

intersect()は3種類ある?

enchant.jsを読むと以下のように書いてある。

enchant.js
var _intersectBetweenClassAndInstance = function(Class, instance) {
    var ret = [];
    var c;
    for (var i = 0, l = Class.collection.length; i < l; i++) {
        c = Class.collection[i];
        if (instance._intersectOne(c)) {
            ret.push(c);
        }
    }
    return ret;
};

var _intersectBetweenClassAndClass = function(Class1, Class2) {
    var ret = [];
    var c1, c2;
    for (var i = 0, l = Class1.collection.length; i < l; i++) {
        c1 = Class1.collection[i];
        for (var j = 0, ll = Class2.collection.length; j < ll; j++) {
            c2 = Class2.collection[j];
            if (c1._intersectOne(c2)) {
                ret.push([ c1, c2 ]);
            }
        }
    }
    return ret;
};

インスタンス同士だけではなく、クラスとクラスの当たり判定やクラスとインスタンスの当たり判定があると書かれている。

_intersectBetweenClassAndInstanceでは第一引数のクラスのコレクション一つ一つに対して、第二引数のインスタンスと当たり判定を行い、当たっているオブジェクトの配列を返している。
_intersectBetweenClassAndClassでは第一引数のクラスのコレクションそれぞれに対して、第二引数のクラスのコレクションそれぞれと当たり判定を行い、当たっているオブジェクトの配列を返している。

Example

Class1のインスタンスとClass2のインスタンスが当たったら画面から消すExampleは以下のようになる。

example
//クラス同士の当たり判定
Class1.intersect(Class2).forEach(function(pair){
    //pair[0]: Class1のインスタンス
    //pair[1]: Class2のインスタンス
    scene.removeChild(pair[0]);
    scene.removeChild(pair[1]);
});
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3