2013-06-01 41 views
3

我有兩個圖像,一個是殭屍,另一個是殭屍將有10%機會產生的刀片。我想定位刀片,以便它將右手重疊殭屍。如果殭屍的寬度與寬度相同,但我認爲它可以做到這一點,但因爲它是62x55,所以一切都變得更加複雜。那現在定位在刀片和殭屍的代碼如下所示:將圖像定位在旋轉圖像中

at = new AffineTransform(); 
angle = Math.atan2(player.getY() - zombie.getY(), player.getX() - zombie.getX()) + (Math.PI/2); 
at.setToTranslation(zombie.getX(), zombie.getY()); 
at.rotate(angle, zombie.getWidth()/2, zombie.getHeight()/2); 
g2d.drawImage(zombie.getBrImage(),at,this); 
ImageIcon ii = new ImageIcon("Blade.png"); 
Image image = ii.getImage(); 
int x = (int) Math.round(zombie.getX() + 47 * Math.sqrt(2) * Math.cos(angle - Math.PI/4)); 
int y = (int) Math.round(zombie.getY() + 47 * Math.sqrt(2) * Math.sin(angle - Math.PI/4)); 
at.setToTranslation(x, y); 
at.rotate(angle, zombie.getWidth()/2, zombie.getHeight()/2); 
g2d.drawImage(image, at, this); 

這將產生以下結果:

currentbladepos

正如你所看到的,刀片被定位在較高的ÿ (如果你計算0作爲屏幕的頂部,就會降低y),因爲殭屍會旋轉,所以它總是面對玩家,我不能只是改變數字47,因爲那時刀片不會正常旋轉。

那麼我將如何使刀片總是被正確定位,這樣無論殭屍面對什麼角度,它總會產生以下結果?

bladepos

+0

殭屍旋轉任何程度? – Will

+0

你可以發佈多一點的代碼? – Will

+0

什麼是數字「47」?即使它通常是常量,通常使用變量來使其更易於閱讀和更改 –

回答

0

你可以有兩個圖像:

  • 一個沒有刀片(Img1
  • 一個與刀片(Img2):以殭屍和刀片,以及在合成它開始,例如在構造函數中。

然後,你可以只說:

if (randomValue < 0.10) { zombieImg = Img1 } else { zombieImg = Img2}

然後就是翻譯/旋轉/等。初始化後的ZombieImg

您認爲如何? :-)