본문 바로가기

컴퓨터/자바코딩

자바 코딩(keyListener)

반응형

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class java3_03_sprite extends Applet
  implements Runnable, KeyListener
{
  Thread clock; // 기준되는 시계

  Image off; // 메모리 상의 가상화면
  Graphics offG;

  Image bgImage; // 배경 이미지
  Image ufo; // ufo 이미지
  int x, y; // ufo의 x,y좌표

  public void init()
  {
    // 메모리 상에 가상화면 만들기
    off= createImage(500, 500);
    offG= off.getGraphics();

    // 이미지 로드
    MediaTracker myTracker= new MediaTracker(this);

    bgImage= getImage(getCodeBase(), "map.gif");
    myTracker.addImage(bgImage,0);
    ufo= getImage(getCodeBase(), "ufo.gif");
    myTracker.addImage(ufo,0);

    try{
      myTracker.waitForAll();
    }catch(InterruptedException ie){}

    while((myTracker.statusAll(true) & MediaTracker.COMPLETE)==0){}

    x=100; y=100; // ufo의 시작위치

    addKeyListener(this); 
  }

  public void start()
  {
    if(clock==null){
      clock= new Thread(this);
      clock.start();  // 시계 시작
    }
  }

  public void paint(Graphics g)
  {
    // 가상화면을 실제화면에 출력
    g.drawImage(off, 0, 0, this);
  }

  public void update(Graphics g)
  {
    paint(g);
  }

  public void run()
  {
    while(true)
    {
      try{
        clock.sleep(50);
      }catch(InterruptedException ie){}

      offG.setColor(Color.white);
      offG.fillRect(0,0,500,500);
      offG.drawImage(bgImage, 0, 0, this);
      offG.drawImage(ufo, x, y, this); // 가상화면에 출력

      repaint(); // paint() 호출
    }
  }

  public void stop()
  {
    if((clock!=null)&&(clock.isAlive())){
      clock=null; // 시계 정지(없앰)
    }
  }

  public void destroy()
  {
    // 종료 루틴
  }
 
  public void keyPressed(KeyEvent e)
  {
   if(e.getKeyCode()==39)
   {
    x = x+1;
   }
   if(e.getKeyCode()==37)
   {
    x = x-1;
   }
   if(e.getKeyCode()==40)
   {
    y = y+1;
   }
   if(e.getKeyCode()==38)
   {
    y = y-1;
   }
  }
 
  public void keyReleased(KeyEvent e)
  {
  }
 
  public void keyTyped(KeyEvent e)
  {
  }
}

반응형