Box2d箭头转换-Java

Box2d箭头转换-Java,java,libgdx,box2d,Java,Libgdx,Box2d,我正在用Box2d支持的LibGdx制作一个弓箭手游戏。许多Box 2D教程都是C++的,所以有些方法与java不同。 我想做的是当它与一个盒子碰撞时,把箭头粘在一起。我找到了一个教程,但是它是C++的,我没办法找到解决这个问题的方法。实际上这是一道数学题。这里是C++代码< /p> //start with standard positions as for normal arrow creation b2Vec2 vertices[4]; vertices[0].Set( -1.4f

我正在用Box2d支持的LibGdx制作一个弓箭手游戏。许多Box 2D教程都是C++的,所以有些方法与java不同。 我想做的是当它与一个盒子碰撞时,把箭头粘在一起。我找到了一个教程,但是它是C++的,我没办法找到解决这个问题的方法。实际上这是一道数学题。这里是C++代码< /p>
//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 );
//从标准位置开始创建普通箭头
b2Vec2顶点[4];
顶点[0]。集合(-1.4f,0);
顶点[1]。集(0,-0.1f);
顶点[2]。集合(0.6f,0);
顶点[3]。集(0,0.1f);
//现在乘以箭头和目标变换之间的差值
b2Transform diffTransform=b2MulT(si.targetBody->GetTransform(),si.arrowBody->GetTransform());
对于(int i=0;i<4;i++)
顶点[i]=b2Mul(diffTransform,顶点[i]);
b2PolygonShape polygonShape;
多边形形状集(顶点,4);
//在目标实体中创建新的装置
b2FixtureDef fixtureDef;
fixtureDef.shape=&polygonShape;
fixtureDef.density=1;
si.targetBody->CreateFixture(&fixtureDef);
//丢弃原来的箭头主体
m_world->DestroyBody(即箭头体);
目的是当箭头与长方体碰撞时,创建新的箭头固定装置将其添加到长方体,然后移除旧的箭头体。除箭头变换外,所有操作均已完成


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

我不熟悉
box2d
,但考虑到您的程序逻辑,有一点似乎是
b2MulT(x,y)
是矩阵x与矩阵y转置的矩阵乘法

xT*y

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

希望这能起到作用

顺便问一下,您是否检查了box2d-
我认为它应该有矩阵类实现——因为矩阵乘法是所有转换的基础。

我不知道你正在尝试什么,但是我怀疑C++中的代码是错误的。数学看起来是错的。它应该是
target^(-1)*箭头
。因此,你应该倒过来,而不是转置,以获得“差异”。但正如我所说,我不知道你到底在做什么。在Box2D代码中,这将是:
b2Mul(si.targetBody->GetTransform()->Invert(),si.arrowBody->GetTransform())