Java'da Görüntü Haraketleri

Java'da resim nesnelerinin nasıl haraket ettirildiğine dair bir örnek. Zamanlayıcı kullanımı ve klavyeyi dinlemeye ilişkin kodlar da içeriyor.

Java'da Görüntü Haraketleri

Java'da bir resmin haraeket etmesi, daha önce belli bir konuma yerleştirilmiş bir resmin daha sorna başka bir noktada çizilmesinden ibaretti. Hareketi tetikleyen iki neden olabilir : ya kullanıcı fare veya klavye gibi bir girdi aygıtıyla belli bir değişikliğe neden olur ya da yer değişikliği uygulamanın içinden bir zamanlanlayıcı tarafından gerçekleştirilir.

Olay (Event) Sonucu Resimde Yer Değişikliği

Fare ve klavye kaynaklı değişiklikle, bir olayın dinlenmesi, o olay karşısında konumu belirleyen değişkenlerin değiştirilmesi ve daha sonra resmin tekrar çizilmesinden ibarettir. Örneğitn bir tuşa basıldığında

  public void keyPressed(KeyEvent e){
    int keyCode=e.getKeyCode();
    if(keyCode==KeyEvent.VK_LEFT){
      x1--;
      repaint();
    }else if(keyCode==KeyEvent.VK_RIGHT){
      x1++;
      repaint();
    }else if(keyCode==KeyEvent.VK_UP){
      y1--;
      repaint();
    }else if(keyCode==KeyEvent.VK_DOWN){
      y1++;
      repaint();
    }
  }

biçiminde bir işlem yapılabilir. Burada x1 ve y1 değişkenleri ok tuşlarına göre yeni bir değer almaktadır. Her değişiklikten sonra repaint() yöntemiyle çizimin tekrar yapılması gerekir.

 Zamanlayıcı (Timer) Sonucu Resimde Yer Değişikliği

Hareket değişikliği, belli bir zamana bağlı olarak yapılabilir. Örneğin bir resim 100 milisaniyede bir x ve y yönünde birer pixel artırmak için

    java.util.Timer t=new java.util.Timer();
    TimerTask task=new TimerTask(){
      public void run(){
        x2++;
        y2++;
        repaint();
      }
    };
    t.schedule(task,0,100);  

şeklinde bir kod yazılabilir. Burada Timer nesnesine konum değişikliği yapıp yeniden çizim yapılmasını sağlayan TimerTask örneği schedule() yöntemiyle veriliyor.

Java'da Görüntü Haraketleri

Hem olayla hem de zamanlayıcıyla hareket eden iki resmi içeren bir örnek :

package com.godoro.samples.awt;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class ImageMoveCanvas
  extends Canvas
  implements KeyListener
{  
  private Image image1;
  private Image image2;
  private int x1=0;
  private int y1=0;
  private int x2=50;
  private int y2=50;   
 
  public ImageMoveCanvas(Image image1,Image image2){
    this.image1=image1;
    this.image2=image2;     
    addKeyListener(this);
    java.util.Timer t=new java.util.Timer();
    TimerTask task=new TimerTask(){
      public void run(){
        x2++;
        y2++;
        repaint();
      }
    };
    t.schedule(task,0,100);           
  }
  public void paint(Graphics g){
    g.drawImage(image2,x2,y2,this);
    g.drawImage(image1,x1,y1,this);   
  }       
  public void keyPressed(KeyEvent e){
    int keyCode=e.getKeyCode();
    if(keyCode==KeyEvent.VK_LEFT){
      x1--;
      repaint();
    }else if(keyCode==KeyEvent.VK_RIGHT){
      x1++;
      repaint();
    }else if(keyCode==KeyEvent.VK_UP){
      y1--;
      repaint();
    }else if(keyCode==KeyEvent.VK_DOWN){
      y1++;
      repaint();
    }
  }
  public void keyReleased(KeyEvent e){}
  public void keyTyped(KeyEvent e){}     
 
  public static void main(String[] args){
    Frame frame=new Frame();
    frame.setBounds(10,10,300,300);
    Toolkit toolkit=Toolkit.getDefaultToolkit();
    String folder="E:GoyaJavaDeeplyJavaBookJavaBooktest";
    Image image1=toolkit.getImage(folder+"cat.gif");
    Image image2=toolkit.getImage(folder+"mouse.gif");
    ImageMoveCanvas canvas=new ImageMoveCanvas(image1,image2);       
    frame.add(canvas);
    frame.setVisible(true);
  }
 
}

 

Kaynak www.godoro.com/Portal/Content/Article/ArticleViewPage.aspx

Yorumunuzu Ekleyin

Yükleniyor...