Box2d箭头转换 - Java

时间:2014-06-28 22:28:12

标签: java libgdx box2d

我正在使用Box2d支持LibGdx的射手游戏。许多Box2D教程都是用C ++编写的,因此有些方法与Java不同。

我想做的是当它与一个盒子碰撞时坚持使用箭头。我找到了一个教程,但它是用C ++编写的,我找不到解决问题的方法。实际上这是一个数学问题。这是C ++代码

//start with standard positions as for normal arrow creation
  b2Vec2 vertices[4];
  vertices[0].Set( -1.4f,     0 );
  vertices[1].Set(     0, -0.1f );
  vertices[2].Set(  0.6f,     0 );
  vertices[3].Set(     0,  0.1f );

  //now multiply by difference between arrow and target transforms
  b2Transform diffTransform = b2MulT( si.targetBody->GetTransform(), si.arrowBody->GetTransform() );
  for (int i = 0; i < 4; i++)
      vertices[i] = b2Mul(diffTransform, vertices[i]);

  b2PolygonShape polygonShape;
  polygonShape.Set(vertices, 4);

  //create a new fixture in the target body
  b2FixtureDef fixtureDef;
  fixtureDef.shape = &polygonShape;
  fixtureDef.density = 1;
  si.targetBody->CreateFixture( &fixtureDef );

  //discard the original arrow body
  m_world->DestroyBody( si.arrowBody );

目标是当箭头与盒子碰撞时,创建一个新的箭头夹具将其添加到盒子的主体然后移除旧的箭头体。全部完成除了箭头的转换。

问题是Java中没有b2MulT或b2Mul函数。我想用碰撞发生时用旧箭头值的位置和角度变换箭头。

1 个答案:

答案 0 :(得分:1)

我不熟悉box2d,但鉴于您的程序逻辑和search b2MulT(x,y)xT * y矩阵乘法矩阵x 转置用矩阵y。

{{1}}

如果Java没有为您提供box2d的精确实现,请使用矩阵转置乘法搜索矩阵类的高效Java实现。

这应该有希望做到这一点。

BTW你检查了box2d的java端口 - http://www.jbox2d.org/ 我认为应该实现矩阵类 - 因为矩阵乘法是所有变换的基础。