Итак, я просматривал исходный код Metagun Нотча и не могу понять, как ему удалось добиться анимации спрайтов. Прямо сейчас все, что я пытаюсь сделать, это перебрать некоторые изображения анимации ходьбы персонажа. Вот код, мой вывод пока показывает только первое изображение ходьбы, на котором персонаж стоит на месте: анимация пакета;
import java.awt.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
public class SpriteAnimation extends JComponent{
/**
*
*/
private static final long serialVersionUID = 1L;
int frame=0;
public void paint(Graphics g){
try{
BufferedImage still = ImageIO.read(SpriteAnimation.class.getResource("still.png"));
BufferedImage walkRight = ImageIO.read(SpriteAnimation.class.getResource("right.png"));
BufferedImage midWalk = ImageIO.read(SpriteAnimation.class.getResource("mid.png"));
BufferedImage walkLeft = ImageIO.read(SpriteAnimation.class.getResource("left.png"));
BufferedImage[] states={still,walkRight,midWalk};
int frame=0;
do{
frame++;
if(frame>=3){
frame=0;
g.drawImage(states[frame],0,0,null);
}
}
while(true);
}catch(Exception e){
}
}
}
paint
вызывается каждый раз, когда компонент должен быть перерисован, но ваш код пытается действовать как основной цикл анимации, хотя на самом деле он должен просто отрисовывать один кадр. Цикл анимации должен контролироваться каким-тоTimer
, который просит окно перерисовывать себя каждые X миллисекунд, а ваш методpaint
должен рисовать текущий кадр вашей анимации. - person asermax   schedule 23.07.2013catch (Exception e) { ..
наcatch (Exception e) { e.printStackTrace(); // very informative! ..
2)while(true);
никогда не делайте этого в графическом интерфейсе! - person Andrew Thompson   schedule 23.07.2013JComponent
переопределитеpaintComponent(Graphics)
вместоpaint(Graphics)
. - person Andrew Thompson   schedule 23.07.2013