famo.us在碰撞事件时访问collisionData

时间:2014-12-31 01:22:12

标签: javascript famo.us physics-engine

在famo.us来源中,我发现碰撞时会发出两件事:碰撞' string和一个名为collisionData的变量,如下所示:(physics / constraints / Collision.js,第112-122行):

if (this._eventOutput) {
                var collisionData = {
                    target  : target,
                    source  : source,
                    overlap : overlap,
                    normal  : n
                };

                this._eventOutput.emit('preCollision', collisionData);
                this._eventOutput.emit('collision', collisionData);
            }

我知道如何使用'碰撞'像这样的字符串:

collision.on('collision', function() {
  // do stuff
};

但是,了解碰撞事件的目标和来源会非常有帮助。如何访问collisionData? collision.collisionData返回' undefined'。

1 个答案:

答案 0 :(得分:0)

从return事件对象中获取对象:

collision.on('collision', function(data) {
  // do stuff
  console.log('data', data);
  console.log('target', data.target);
  console.log('source', data.source);
});

返回的targetsource是您为创建碰撞而附加的正文对象的粒子。

Example Code here (未完全测试)

只需执行以下操作即可跟踪撞到谁的唯一ID。

// assuming your body is called body and body1 respectively
//   also, this is just partial code.
var uniqueID = 0;
body.particle = new Circle({
  radius: 50,
  position: [x, y, 0]
});
body1.particle = new Circle({
  radius: 50,
  position: [x, y, 0]
});

body.particle.uniqueID = 'body' + uniqueID;
uniqueID += 1;
body1.particle.uniqueID = 'body' + uniqueID;
collision.on('collision', function(data) {
  // do stuff
  console.log('target id', data.target.uniqueID);
  console.log('source id', data.source.uniqueID);
});