0
我一直在Java遊戲中工作,它具有基於旋轉的運動(意味着你旋轉以轉動,並且只能沿着朝着旋轉的方向向前和向後移動)。我幾乎可以工作,但最終遇到了一個問題。爲了使用AffineTransform,您可以使用g2d.drawImage([image],[AffineTransform的名稱],null); 這不允許輸入我的角色放置位置的座標,這意味着我無法在屏幕上移動我的角色,只能旋轉它。如何在Java中使用AffineTransform和一個基於座標系的系統?
如何轉換我的播放器圖像(旋轉它),然後通過我在屏幕上設置的xPos和yPos變量將它正確放置在屏幕上?
如果有任何幫助,這是我的代碼。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
public class Player
{
imageLoader loader = new imageLoader();
private BufferedImage player = loader.loadImage("/player.png");
private BufferedImage rotater = loader.loadImage("/player.png");
AffineTransform transform = new AffineTransform();
public int xPos = 200;
public int yPos = 200;
public double degrees = 90.0;
public Input input;
public void render(Graphics g) //SOMEWHERE IN THIS RENDER METHOD I HAVE TO ROTATE AND DRAW THE PLAYER TO THE SCREEN.
{
transform.setToIdentity();
transform.translate(player.getWidth()/2, player.getHeight()/2);
transform.rotate(Math.toRadians(degrees));
transform.translate(-player.getWidth()/2, -player.getHeight()/2);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(player, transform, null);
System.out.println("PLAYER_X = "+xPos+" | " + "PLAYER_Y " + yPos + " | " + "ROTATION " + degrees);
}
public void moveForward()
{
xPos += (int) (Math.sin(degrees * (Math.PI/180)) * 4);
yPos += (int) (Math.cos(degrees * (Math.PI/180)) * -4);
}
public void moveBackward()
{
xPos -= (int) (Math.sin(degrees * (Math.PI/180)) * 4);
yPos -= (int) (Math.cos(degrees * (Math.PI/180)) * -4);
}
public void rotateLeft()
{
degrees = degrees - 4;
}
public void rotateRight()
{
degrees = degrees + 4;
}
}
太感謝你了, 我希望你可以幫我。
瑞安科克裏
我的回答有幫助嗎? – 2014-11-10 05:45:31