gpt4 book ai didi

java - 当 Sprite 旋转时,边界框不旋转

转载 作者:太空宇宙 更新时间:2023-11-04 07:08:38 25 4
gpt4 key购买 nike

正在开发一个简单的 Java 2D 游戏。水箱由用户控制。它可以旋转任意角度,并朝该角度的方向移动。

我正在为坦克制作一个边界框,以便稍后我可以添加碰撞检测。目前,无论 Sprite 走到哪里,我都有一个盒子跟随 Sprite ,但当 Sprite 旋转时它不会旋转。我尝试添加代码以使框随 Sprite 旋转,但添加此代码只会使边界框变得疯狂。它不再显示为一个盒子,更像是一条闪烁和移动的线。

(显然,边界框应该是不可见的,但现在我将其绘制在屏幕上以检查是否存在问题)。

xcoo[]ycoo[] 都是 double 类型,并且各自保存四个值。这些值是边界框(矩形 Path2D)的四个顶点的坐标。

(请注意,实际的边界框仅在需要在屏幕上绘制时创建,或者在我尚未编写的碰撞检测中创建。大多数时候,它只是坐标。)

坦克的 move() 方法在游戏循环的每个周期都会被调用。

move() 方法更新 Sprite 的位置以及边界框的位置。这很好用。但正如我所说,尝试在该方法中旋转边界框(又名使用旋转矩阵操纵它的顶点),使其继续

这是Tankmove()方法:

public void move(){

// Updates the location of the sprite. (works)
x += dx;
y += dy;

bbCenterX += dx;
bbCenterY += dy;

// Updates the location of the bounding box. (works)
for(int i=0;i<4;i++){
xcoo[i] += dx;
ycoo[i] += dy;
}

// Should rotate the bounding box (aka, manipulate it's coordinates
// so when it is created with these coordinates, it's rotated).
// (Doesn't work).
for(int z=0;z<4;z++){

xcoo[z] = xcoo[z] - bbCenterX;
ycoo[z] = ycoo[z] - bbCenterY;

xcoo[z] = ((xcoo[z] * Math.cos(angle)) - (ycoo[z] * Math.sin(angle)));
ycoo[z] = ((xcoo[z] * Math.sin(angle)) + (ycoo[z] * Math.cos(angle)));

xcoo[z] = xcoo[z] + bbCenterX;
ycoo[z] = ycoo[z] + bbCenterY;

}

}

我的旋转有什么问题吗?我怀疑这就是代码中出现问题的部分,但如果您有不同的想法,请告诉我发布更多代码。

非常感谢

最佳答案

回答问题的标题 - 当 Sprite 旋转时,边界框不会旋转

在计算机图形学中,边界框最常见的实现是 Axis-aligned minimum bounding box当您旋转 Sprite 时,它显然不会旋转,因为它轴对齐

我不知道您正在使用的 Java 2D 包实现了什么实现,但它听起来确实像这样,而不是 Arbitrarily oriented minimum bounding box如您所愿。

也许边界框的渲染在某种程度上假设它是轴对齐的,因此当您使用非轴对齐的框来呈现它时无法渲染。

关于java - 当 Sprite 旋转时,边界框不旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20960331/

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