Я пытаюсь создать простую программу, которая отображает изображение растрового зомби, а затем вращает его вокруг, используя AffineTransform и Thread. Я следовал примеру, который я должен был выполнить, но всякий раз, когда я запускаю программу, растровое изображение зомби просто вращается один раз и останавливается. Кроме того, по какой-то причине, когда я рисовал растровое изображение зомби, изображение частично выходит за экран вдоль оси 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) ;. У меня все еще было движение, на этот раз по экрану, но одна вещь, которую я заметил, - это первый раз, когда изображение рисуется, местоположение намного больше, чем 5 пикселей от 0,0 точки.Итак, как я могу заставить изображение начинать с 0,0, а затем переводить его по 5 пикселей за раз. Кроме того, изображение все еще сидит высоко на оси y с частью экрана сидения. Любая идея, как исправить это или что может быть причиной этого. –