如何将一个hitbox置于旋转三角形精灵中心?

时间:2017-07-08 19:32:13

标签: java libgdx

我在旋转三角形精灵的中心绘制撞击箱时遇到问题。当我生成三角形时,我将碰撞矩形设置为:

bullet.collisionRect.width = flashingTriangleSprite.getWidth() - 20;
bullet.collisionRect.height = flashingTriangleSprite.getHeight() - 14;
bullet.scale = 0.287f;

更新完成如下:

bullet.position.y += bullet.velocity.y; 

// center collision rect over triangle sprite
bullet.collisionRect.x = 
  bullet.position.x + ((flashingTriangleSprite.getWidth() / 2) - bullet.collisionRect.getWidth() / 2);
bullet.collisionRect.y = 
  bullet.position.y + ((flashingTriangleSprite.getHeight() / 2) - bullet.collisionRect.getHeight() / 2);

if (bullet.scale < 1)
{
  bullet.scale += 0.011f;
}

if (bullet.driftDirection == Globals.Direction.LEFT)
{
  bullet.rotation -= 3.804f;
  bullet.position.x -= bullet.velocity.x;
}
else // drift right
{
  bullet.rotation += 3.804f;
  bullet.position.x += bullet.velocity.x;
}

结果如下:http://imgur.com/rIvIT8K

如您所见,hitboxes不居中。事实上,根据三角精灵的旋转,hitbox似乎改变了三角形精灵内的位置。我有什么想法吗?

1 个答案:

答案 0 :(得分:1)

确定您的hitbox中心位置时,您的目标是三角形精灵(正方形)的中心,但这不是绘制三角形的完美中心。

因此,您的hitbox始终更接近三角形的一个顶点(取决于旋转)。此外,您的hitbox永远不会随着三角形旋转,相反它们似乎总是垂直竖立。

要将hitbox放置在三角形的中间,你应该瞄准精灵高度的1/3(如果三角形在底部精灵图像的底部有一侧平坦)并且当你更新精灵时,尝试更新hitbox旋转以匹配精灵旋转。

您还可以尝试使用PolygonShape制作更精确的三角形命中框,但这取决于您。