0

使用している Box2D API からのコールバックによってアクティブ化されるプロトタイプ メソッドがあります。コールバックは関数に到達できますが、関数の正しいインスタンスではありません。この.prototype クラスを呼び出すためのコールバックを取得するための適切な構文は何ですか?

Box2D API の呼び出し:

Box2d.prototype.getBodyAtMouse = function() {
   this.mousePVec = new this.b2Vec2(this.mouseX/this.SCALE, this.mouseY/this.SCALE);
   var aabb = new this.b2AABB();
   aabb.lowerBound.Set(this.mouseX/this.SCALE - 0.001, this.mouseY/this.SCALE - 0.001);
   aabb.upperBound.Set(this.mouseX/this.SCALE + 0.001, this.mouseY/this.SCALE + 0.001);
   this.selectedBody = null;
   var _this = this; 
   this.world.QueryAABB(_this.getBodyCB, aabb);
   return this.selectedBody;

}

これは、呼び出される box2D API メソッドです。

b2World.prototype.QueryAABB = function (callback, aabb) {
  var __this = this;
  var broadPhase = __this.m_contactManager.m_broadPhase;

  function WorldQueryWrapper(proxy) {
     return callback(broadPhase.GetUserData(proxy));
  };
  broadPhase.Query(WorldQueryWrapper, aabb);

}

これは、API に適切な参照を持たせたいコールバックです。

Box2d.prototype.getBodyCB = function(fixture) 
{
  if(fixture.GetBody().GetType() != this.b2Body.b2_staticBody) {
   if(fixture.GetShape().TestPoint(fixture.GetBody().GetTransform(), this.mousePVec)) {
      selectedBody = fixture.GetBody();
      return false;
   }
}
return true;

}

4

1 に答える 1

0

どちらかを使用

var _this = this; 
this.world.QueryAABB(function(fix){
   _this.getBodyCB(fix);
}, aabb);

また

this.world.QueryAABB(this.getBodyCB.bind(this), aabb);

これは古いブラウザではサポートされていませんが、簡単にシムすることができます)

于 2012-07-26T17:11:25.227 に答える