내 게임에서 기본 보안 카메라의 기능을 만들려고합니다. 카메라는 캔바스의 오른쪽 상단 모서리에 위치하여 보안 카메라와 마찬가지로 회전하는 광선을 표시합니다 (한 방향으로 90 ° 이동 한 다음 90 ° 뒤로 이동). 내가 지향하는 기능은 마우스가 빔에 닿으면 콘솔이 "감동"한다는 것입니다.g2d.rotate를 사용하여 만든 회전을 삼각형의 x 좌표에 적용하려면 어떻게해야합니까?
지금까지 g2d.rotate를 사용하여 카메라 광선을 회전 시켰지만 회전 된 캔버스에서는 히트 감지가 움직이지 않았습니다. 나는 한 점을 중심으로 다각형의 점을 움직이는 데 사용되는 정리를 포함하여 여러 가지 해법을 시도해 보았지만 삼각형은 회전 할 때마다 크기가 감소하는 경향을 보였다. 이 히트 테스트에 대한 원래의 회전되지 않은 빔을 사용할 수 있도록
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GradientPaint;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Path2D;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Camera {
private BufferedImage img;
private int x;
private int y;
private boolean moving = false;
private double angle;
private boolean up;
private Graphics2D graphicsTemp;
private AffineTransform at;
private Polygon beam;
private Point p1;
private Point p2;
private Point p3;
private int[] xArray;
private int[] yArray;
public Camera(int x, int y, Point p1, Point p2, Point p3) {
try {
img = ImageIO.read(getClass().getResource("Camera.png"));
} catch (IOException e) {
System.out.println("NO IMAGE");
}
this.x = x;
this.y = y;
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
angle = 0;
up = true;
}
public void update() {
xArray = new int[] { p1.x, p2.x, p3.x };
yArray = new int[] { p1.y, p2.y, p3.y };
beam = new Polygon(xArray, yArray, 3);
}
public void paint(Graphics2D g2d) {
if (up) {
angle += 0.2;
} else {
angle -= 0.2;
}
if (angle >= 90.0 || angle <= 0.0) {
up = !up;
}
g2d.rotate(Math.toRadians(angle), p1.x, p1.y);
g2d.setColor(color);
g2d.fillPolygon(beam);
g2d.setColor(Color.BLACK);
g2d.drawPolygon(beam);
g2d.rotate(-Math.toRadians(angle), p1.x, p1.y);
}
public void testTouch(int mouseX, int mouseY) {
if (beam.contains(mouseX, mouseY)) {
System.out.println("INSIDE");
} else {
System.out.println("OUTSIDE");
}
}
매력처럼 작동했습니다. createTransformedShape() 사용을 고려한 적이 없으며 이전 모양을 새로운 모양으로 완전히 전달한 것입니다. 훌륭한! – ScrubbyDew