자바 애플릿으로 애니메이션 하려는데 깜빡거림 해결방법은?
각티슈
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.Timer;
public class zztest_image01 extends Applet implements MouseListener, MouseMotionListener{
public final static long serialVersionUID = 1L;
BufferedImage img;
BufferedImage img2;
private Timer timer;
private final int delay = 20;
boolean firstTime = true;
public int img2_x = 0, img2_y = 0;
public int speedX, speedY;
public void init()
{
addMouseListener( this );
timer = new Timer(delay, new main_anim());
timer.start();
speedX = speedY = 3;
setBackground (Color.black);
setSize(640, 480);
}
public void paint(Graphics g){
g.drawImage(img, 0, 0, null);
if (firstTime){
g.drawImage(img, 0, 0, null);
}
else {
g.drawImage(img2, img2_x, img2_y, null);
}
}
public zztest_image01() {
try {
img = ImageIO.read(new File(images/mainbg.jpg));
} catch (IOException e) {
}
try {
img2 = ImageIO.read(new File(00000.jpg));
} catch (IOException e) {
}
}
public void mousePressed(MouseEvent e){
firstTime = false;
}
public void mouseReleased(MouseEvent e){
if( img2.getMinX() = e.getX() && e.getX() = img2.getMinX() + img2.getWidth()
&& img2.getMinY() = e.getY() && e.getY() = img2.getMinY() + img2.getHeight() ){
img2_x = e.getX();img2_y = e.getY();
repaint();
}
}
// This method required by MouseListener.
public void mouseMoved(MouseEvent e){}
// These methods are required by MouseMotionListener.
public void mouseClicked(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public class main_anim implements ActionListener {
public void actionPerformed (ActionEvent event){
img2_x += speedX;
img2_y += speedY;
if (img2_x = 0 || img2_x = 600)speedX = speedX * -1;
if (img2_y = 0 || img2_y = 450)speedY = speedY * -1;
invalidate();
repaint();
}
}
}이런 식으로 drawImage 메소드하고 paint 메소드를사용해서 그림을 그린 다음
Timer와 repaint로 일정 간격마다 그림을 새로 그리게 만들었는데
(중간에 마우스이벤트 메소드도 넣었습니다만 그건 무시하시고 ^^;)
다른 특별한 문제점은 없는데요
애니메이션이 작동하는 동안에 가끔씩 깜빡거리더군요
이 문제를 해결하려면 어떻게 해야 하나요?
혹시 invalidate()를 사용하는건가 해서 저기↑에다 써봤지만 쓰나마나 똑같네요... ^^;;
어디를 수정하면 깜빡거림이 없어질까요?
설마 뜯어고쳐야 되는건가요..?
-
두힘
감사합니다 ^^ 그리고 drawImage로 이전에 그린 이미지를 지우려면 어떻게 해야 하나요?
-
김예쁨
더블버퍼링 하세요. ^^