gpt4 book ai didi

java - 如何将碰撞盒置于旋转三角形 Sprite 内的中心?

转载 作者:行者123 更新时间:2023-12-02 12:39:54 24 4
gpt4 key购买 nike

我在旋转三角形 Sprite 中心绘制命中框时遇到问题。当我生成三角形时,我像这样设置碰撞矩形:

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;
}

这是结果:/image/NHAzE.jpg

如您所见,命中框未居中。事实上,命中框似乎会根据三角形 Sprite 的旋转而改变三角形 Sprite 内的位置。你知道我做错了什么吗?

最佳答案

在确定碰撞盒中心位置时,您的目标是三角形 Sprite (一个正方形)的中心,但这并不是所绘制三角形的完美中心。

因此,你的碰撞箱总是更接近三角形的顶点之一(取决于旋转)。此外,你的碰撞箱永远不会随着三角形旋转,相反,它们总是看起来垂直站立。

要将碰撞盒放置在三角形的中间,您应该瞄准 Sprite 高度的 1/3(如果三角形的一侧在基本 Sprite 图像的底部平坦),并且当您更新 Sprite 时,尝试更新碰撞盒旋转以匹配 Sprite 旋转。

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

关于java - 如何将碰撞盒置于旋转三角形 Sprite 内的中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44990054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com