586
No
class ImageAnim
package java11;
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import javax.imageio.ImageIO;
//이미지 애니메이션 처리
//애플릿: 웹 브라우저에서 실행되는 자바 프로그램
public class ImageAnim extends Applet implements Runnable{
Image[] images ;
int idx=0;
//애플릿을 초기화시킴
@Override
public void init() {
// TODO Auto-generated method stub
super.init();
images=new Image[10];
for(int i=0; i<images.length ; i++){
//duke1.gif ~ duke10.gif 이미지를 로딩
//images[i]=Toolkit.getDefaultToolkit().getImage(getClass().getResource("duke" +(i+1)+".gif"));
try{
File file=new File("./java11/duke"+i+".gif");
images[i] =ImageIO.read(file);
}catch (Exception e) {
e.printStackTrace();
}
}
setSize(500, 200);//애플릿의 화면 사이즈 설정
Thread th=new Thread(this);
th.start(); //백그라운드 스레드 실행 요청 =>run()이 실행
}
//애플릿이 그려질 때 자동 호출
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
g.drawImage(images[idx], 90, 73, null);
/* for(int i=0; i<images.length; i++){
g.drawImage(images[i], i*40, 73, null);
}*/
}
@Override
public void run() {
while(true){
idx++;//이미지의 인덱스 증가 처리
if(idx>=10)idx=0;//인덱스가 0 ~9 를 계속 반복하도록 처리
repaint(); // 화면 갱신 요청 =>paint() 호출
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
}
}
}
더블버퍼링
class ImageAnim2
package java11;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import javax.imageio.ImageIO;
//* 더블 버퍼링
// 더블버퍼링을 사용한 프레임 애니메이션
public class ImageAnim2 extends Applet implements Runnable{
Image[] images;
int idx;
Image offImage;// 백그라운드 이미지 (버퍼 영역)
Graphics bg; //백그라운드 영력에 그래픽 처리를 위한 객체
@Override
public void init() {
super.init();
images =new Image[10];
Dimension dim =getSize(); //화면 사이즈 정보
//백그라운드 이미지 영역 생성
offImage =createImage(dim.width, dim.height);
//백그라운드 화면에 그래픽 처리할 객체 생성
bg=offImage.getGraphics();
for(int i=0; i<images.length ; i++){
//duke1.gif ~ duke10.gif 이미지를 로딩
//images[i]=Toolkit.getDefaultToolkit().getImage(getClass().getResource("duke" +(i+1)+".gif"));
try{
File file=new File("./java11/duke"+i+".gif");
images[i] =ImageIO.read(file);
}catch (Exception e) {
e.printStackTrace();
}
}
setSize(200, 200);//애플릿의 화면 사이즈 설정
Thread th =new Thread(this);
th.start();
}
@Override
public void run() {
while(true){
idx++;//이미지의 인덱스 증가 처리
if(idx>=10)idx=0;//인덱스가 0 ~9 를 계속 반복하도록 처리
repaint(); // 화면 갱신 요청 =>paint() 호출
try{
Thread.sleep(10);
}catch(Exception e){
e.printStackTrace();
}
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
//백그라운드 영역에 그래픽 처리
bg.setColor(Color.yellow);
bg.fillRect(0, 0, getWidth(), getHeight());
bg.drawImage(images[idx], 90, 30, null);
//백그라운드 이미지를 현재 그래픽 화면에 복사
g.drawImage(offImage, 0, 0, null);
//g.drawImage(images[idx], 90, 73, null);
}
}
댓글 ( 4)
댓글 남기기