2014-11-08 79 views
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; 
    } 
} 

太感謝你了, 我希望你可以幫我。

瑞安科克裏

+0

我的回答有幫助嗎? – 2014-11-10 05:45:31

回答

0

你已經擁有的代碼在你的方法,以旋轉和平移(畫在某個位置)。 您的原始代碼已經以座標-width/2, - 高度/ 2繪製圖像(因爲您的圖像圍繞其中心旋轉,而不是左上角)

因此,這是一個添加額外的翻譯,你需要畫在xPos,yPos:

transform.translate(-xPos + player.getWidth()/2, -yPos + player.getHeight()/2); 
    transform.rotate(Math.toRadians(degrees)); 
    transform.translate(xPos - player.getWidth()/2, yPos - player.getHeight()/2);