我对编程很新,我正在尝试制作一个小游戏,你可以独立控制(旋转)坦克和坦克顶部的不同枪支。 (我正在使用光滑的)
在坦克旋转过程中,枪支应围绕坦克图像的中心旋转,因为它们是连接在一起的。public void drawTankandGuns(){
tankImage.draw(position.x, position.y);
gunImage.draw(position.x+canonOffsetX, position.y+canonOffsetY);
}
public void rotateDuringMovement(){
gunImage.setCenterOfRotation(tankImage.getWidth/2-gunOffsetX,
tankImage.getHeight/2-gunOffsetY);
gunImage.rotate(angle);
tankImage.rotate(angle);
}
到目前为止工作正常。枪附着并与坦克一起旋转。但是如果我想在没有水箱的情况下旋转喷枪(并且水箱已经旋转)并将旋转中心设置回喷枪,那么喷枪图像将被拉回到其原始位置,从而失去旋转水箱周围的位置。
编辑:解决方案是使用不同的方法。绘制gunImage依赖于tankImage旋转的sin / cos。
答案 0 :(得分:1)
解决方案是使用不同的方法。 绘制枪图像取决于坦克图像旋转的sin / cos。
//calculate the gun position on top of the tank
gunPosX = tankPosX + gunPosOffsetX;
gunPosY = tankPosY + gunPosOffsetY;
//calculate the tank rotation center
tankRotationsCenterX = tankPosX + tankImage.getCenterOfRotationX();
tankRotationsCenterY = tankPosY + tankImage.getCenterOfRotationY();
//calculate distance between gun position and tank rotation center
dx = tankRotationsCenterX - gunPosX ;
dy = tankRotationsCenterY - gunPosY ;
dis = Math.sqrt(dx * dx + dy * dy);
//calculate the offset based on the rotation of the tank
//rotation offset for the gun placement
gunRotaOff = 20;
gunX_offset = dis*Math.cos(Math.toRadians(tankImage.getRotation()+gunRotaOff));
gunY_offset = dis*Math.sin(Math.toRadians(tankImage.getRotation()+gunRotaOff));
gunXhalf = gun.getImage().getWidth() / 2;
gunYhalf = gun.getImage().getHeight() / 2;
//draws the gun dependend on the ship position and the ship rotation
//don't forget to subtract half the width/height for exact positioning
gun.drawIngame(tankRotationsCenterX - gun_x_offset)-gunXhalf , (tankRotationsCenterY - gun_y_offset) - gunYhalf ));