我想創建一個簡單的程序,顯示一個位圖殭屍圖片,然後使用AffineTransform和線程旋轉它。我遵循我必須完成的例子,但是每當我運行該程序時,殭屍位圖只是旋轉一次並停止。此外,由於某些原因,當我繪製殭屍位圖時,圖像沿y軸部分偏離屏幕。如何旋轉位圖與AffineTransform
所以我的問題是:爲什麼位圖不旋轉,爲什麼位圖離開屏幕。
代碼如下:
import java.awt.*;// Graphics class
import java.awt.geom.*;
import java.net.*;//URL navigation
import javax.swing.*;//JFrame
import java.util.*;//Toolkit
public class BitMapZombies2 extends JFrame implements Runnable
{
private Image zombieOneRight;
Thread zombieRun;
public static void main (String[] args)
{
new BitMapZombies2();
}
public BitMapZombies2()
{
super("Bit Map Zombies..RUN FOR YOUR LIFE!!!");
setSize(800,600);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Toolkit Zkit = Toolkit.getDefaultToolkit();
zombieOneLeft = Zkit.getImage(getURL("_images/_production_images/zombie_1_left_75h.png"));
zombieOneRight = Zkit.getImage(getURL("_images/_production_images/zombie_1_right_75h.png"));
zombieRun = new Thread(this);
zombieRun.start();
}
AffineTransform zombieIdentity = new AffineTransform();
private URL getURL(String filename)
{
URL url = null;
try
{
url = this.getClass().getResource(filename);
}
catch (Exception e) {}
return url;
}
public void paint(Graphics z)
{
Graphics2D z2d = (Graphics2D) z;
AffineTransform ZombiePowered = new AffineTransform();
z2d.setColor(Color.BLACK);
z2d.fillRect(0,0, 800, 600);
ZombiePowered.setTransform(zombieIdentity);
ZombiePowered.rotate(2,37.5,37.5);
z2d.drawImage(zombieOneRight,ZombiePowered,this);
}
public void run()
{
Thread zT = Thread.currentThread();
while (zT == zombieRun)
{
try
{
Thread.sleep(500);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
repaint();
}
}
}
感謝所有幫助我能得到這個。
感謝照顧輪換問題,我需要做更多的研究來了解評論,但現在我有一個開始的地方。即使旋轉0,圖像仍然部分顯示在屏幕外。 –
隨着旋轉工作,我決定使用這些信息並將其應用於翻譯。我替換了ZombiePowered.rotate(2,37.5,37.5);與ZombiePowered.translate(5,0);.我仍然有動作,這次是在屏幕上,但我注意到的一件事是第一次繪製圖像時,位置遠遠大於0,0點的5個像素。那麼,我怎樣才能讓圖像從0,0開始,然後一次翻譯5個像素。此外,圖像仍坐在y軸高位,部分圖像位於屏幕之外。任何想法如何解決這個問題或可能導致它。 –