플레이어가 장애물을 통해 다각형을 안내하는 Java에서 2D 게임을 만들고 있습니다. 다각형은 위아래로 움직이며 게임 세계는 좌우로 스크롤됩니다. 그 중심을 중심으로 회전하려면 다각형이 필요하지만, 점을 이동하기 때문에 끊임없이 점이 변환되기 때문에 움직입니다. 원래 중심점으로 다시 변환하려고 시도하고 회전 시키면 다시 작동하지 않습니다. 도형의 중심을 어떻게 구합니까? 화면의 중앙움직이는 모양을 중심으로 회전하십시오.
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D)g;
Graphics g2 = g.create();
Graphics2D copy = (Graphics2D)g2;
copy.rotate(-angleRad, xPos, yPos);
copy.translate(0, -moveY);
g2D.translate(-moveX, 0);
copy.draw(player.shape);
for (Rectangle2D.Double r: DronePilot.rocksFloorArray) {
g2D.draw(r);
}
for (Rectangle2D.Double r: DronePilot.rocksCeilArray) {
g2D.draw(r);
}
for (Rectangle2D.Double r: DronePilot.roomsArray) {
g2D.draw(r);
}
}
(X 좌표, Y 좌표)됩니다 여기
@Override
public void actionPerformed(ActionEvent e) {
double theta = angleRad+90;
if (up == true) {
if (accelerating == false) {
time2 = 0;
moveX0 = moveX;
moveY0 = moveY;
accelerating = true;
}
time1++;
double t = time1/500;
if (accCount % 10 == 0) {
DronePilot.velocity++;
}
moveX = moveX0 + velX*Math.cos(theta)*t;
moveY = moveY0 + velY*Math.sin(theta)*t-(1/2d)*g*Math.pow(t, 2);
velX = (DronePilot.velocity)*Math.cos(theta);
velY = (DronePilot.velocity)*Math.sin(theta)-g*(t);
accCount++;
} else if (up == false){
if (accelerating == true) {
time1 = 0;
moveX0 = moveX;
moveY0 = moveY;
accelerating = false;
}
time2++;
double t = time2/500;
moveX = moveX0 + velX*Math.cos(theta)*t;
moveY = moveY0 + velY*Math.sin(theta)*t-(1/2d)*g*Math.pow(t, 2);
accCount = 0;
} if (left == true) {
angleCount++;
if (angleCount % 2 == 0) {
angleDeg++;
}
angleRad = Math.toRadians(angleDeg);
} else if (right == true) {
angleCount--;
if (angleCount % 2 == 0) {
angleDeg--;
}
angleRad = Math.toRadians(angleDeg);
}
repaint();
}
}
그리고 내의 paintComponent 방법은 다음과 같습니다
은 2ms의 타이머에 내 움직임 계산이다.
음에 영향을주지 않습니다.나는 당신이 먼저 위치를 번역하고 싶다고 가정 할 것이다. 이것은 중심 위치에 대해 객체를 회전시키는 것이 훨씬 더 쉽다. – MadProgrammer
당신은 또한 모든 종류의 흥미를 유발할 수있는'g2D'와'copy'를 번역하고있는 것처럼 보인다. 바람직하지 않은) 이슈 – MadProgrammer