嗨,我是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 文档,我已经阅读过它们,但它们没有帮助我,我正在寻找可以使其变得更容易的人的解释。
提前谢谢您。
最佳答案
这里rotation
是degrees中的角度,值为 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/