Java ImageIcon动画闪烁

标签 java animation imageicon

出于某种原因,当切换图标时图像会闪烁。当我尝试创建对象然后尝试通过将 x 和 y 作为对象的参数传递来使它们移动时,我还会遇到这个问题。任何帮助都会很棒。

public class Main extends JFrame implements ActionListener, KeyListener{

static Main main;
Render render;
Timer timer;

static int x,y,count;

ImageIcon player1 = new ImageIcon("C:\\Users\\Kyle\\Documents\\NetBeansProjects\\Testing52\\src\\testing52\\Player1.png");
ImageIcon player2 = new ImageIcon("C:\\Users\\Kyle\\Documents\\NetBeansProjects\\Testing52\\src\\testing52\\Player2.png");

Main(){

    render = new Render();
    timer = new Timer(100,this);

    setVisible(true);
    setSize(500,500);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
    addKeyListener(this);
    add(render);

    timer.start();

}

public void render(Graphics g){

    count += 1;

    if(count < 20){
         player1.paintIcon(this, g, x, y);
    }

    if(count > 20){
        player2.paintIcon(this, g, x, y);
    }
    if(count > 40){
        count = 0;
    }

}


public static void main(String [] args){

    main = new Main();
}

@Override
public void actionPerformed(ActionEvent e) {

    System.out.println(count);
    render.repaint();  
}

@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyPressed(KeyEvent e) {
    int id = e.getKeyCode();

    int speed = 4;

    if(id == KeyEvent.VK_UP){

        y -= speed;     
    }

    if(id == KeyEvent.VK_DOWN){

        y += speed;
    }

    if(id == KeyEvent.VK_LEFT){

        x -= speed;
    }

    if(id == KeyEvent.VK_RIGHT){

        x += speed;
    }
}

@Override
public void keyReleased(KeyEvent e) {
}

}

渲染类。

 public class Render extends JPanel {

public void paintComponent(Graphics g){
    super.paintComponent(g);

    Main.main.render((Graphics)g);
}

}

最佳答案

另一件事可以让你的动画更流畅,那就是如果你在 repaint() 之后在 Action 事件中调用 revalidate()

关于Java ImageIcon动画闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39803209/

相关文章:

java - Java Apache Olingo 是否查询数据库本身?

java - 如何减少 Java 中 ImageIcon 双数组的执行时间

java - 线程中出现异常 "Thread"java.lang.OutOfMemoryError : Requested array size exceeds VM limit

java - EBean增强专家

Java BackTracking 与硬币

java - 如何在单例类中实现Map?

javascript - 动画不工作

animation - 是否有任何 B 树程序或网站可以直观地展示 B 树的工作原理

html - CSS动画不会第二次申请

java - 存储图像图标