java - 无法理解 AffineTransformation、边界矩形

标签 java graphics2d affinetransform

嗨,我是java游戏编程的新手,我正在阅读一些代码,但我无法理解一些事情。我希望这里有人能够帮我解决一些问题。

1)我知道您使用“边界矩形”来检查碰撞。但我的问题是,当您从 graphpics2d/shapes 类在 java 中创建多边形或方形对象时。它们是否已经包含边界矩形?或者我们必须创建它。另外,下面的代码在做什么,是否创建了一个边界矩形以及它接收哪些信息作为参数。

public Rectangle getBounds(){
Rectangle r;
r = new Rectangle((int)getX() -6,(int) getY() -6,50,50);
return r;
}

2)我知道你在java中使用仿射变换来变换、旋转和缩放东西。但下面的代码有点困惑。你能解释一下这段代码在做什么吗:

int rotation=0;
AffineTransformation identity = new AffineTransformation();
g2d.translate(width/2, height/2);
g2d.scale(20,20);
g2d.rotate(Math.toRadians(rotation));

public void keyReleased(KeyEvent k) { }
    public void keyTyped(KeyEvent k) { }
    public void keyPressed(KeyEvent k) {
        switch (k.getKeyCode()) {
        case KeyEvent.VK_LEFT:
            rotation--;
            if (rotation < 0) rotation = 359;
            repaint();
            break;
        case KeyEvent.VK_RIGHT:
            rotation++;
            if (rotation > 360) rotation = 0;
            repaint();
            break;
        }
    }

现在我最困惑的是 if 语句是如何处理的。旋转变量一开始是0,然后通过(rotation--)递减到-1,它检查是否-1 < 0,然后设置旋转=359,但是在中断之后旋转会回到0吗?

这一行发生了什么:

g2d.rotate(Math.toRadians(rotation));

if 语句是否将值发送到此旋转方法,该方法将其转换为弧度,弧度是否是屏幕上的像素,并且它会旋转到这些像素。这是正确的吗?

如果有人能向我解释这一点,我将不胜感激。请不要将我链接到 java 文档,我已经阅读过它们,但它们没有帮助我,我正在寻找可以使其变得更容易的人的解释。

提前谢谢您。

最佳答案

这里rotationdegrees中的角度,值为 0 <= 旋转 < 360

g2d.rotate(angle) 旋转图像。它需要在 radians 中指定 angle .

Math.toRadians(rotation) 将度数转换为弧度,值 0 <= 弧度 < 2Pi

更新:

按下光标键时,代码会旋转图像。它将向右旋转 1 度或向左旋转 1 度。 完整的转弯是 360 度。当达到 360 度时,它将旋转变量重置为零,这与 360 度的角度相同。因此:

rotation++;
if (rotation > 360) rotation = 0;

关于java - 无法理解 AffineTransformation、边界矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25563715/

相关文章:

java - 编译器从不检查强制转换为泛型类型 (T)?

java - 使用坐标列表更新 G2D

java - 有没有办法缩小 BufferedImage

ios - UIImageView 是否有任何 UV 坐标(或类似坐标)?

java - 如何使用 AffineTransform 的翻译?

java - 代码风格 : "hiding" data types (Java)

java - APK 的不同版本代码,具有 phonegap 构建的 android 应用程序

java - 无法在同一 JPanel 上绘制 Rectangle2D 和 Path2D,可能重叠?

java - 在java中使用正则表达式查找句子中的重复模式

java - 帮助向 JFrame 添加桨