JAVA RESİM HAREKET ETTİRME

Java ile Windows forma resim ekleme ve bu resmi hareket ettirme. Timer kullanarak resmi ekranın kenarları boyunca her yönde hareket ettirme. Resmi yukarı aşağı ve sağa sola hareket ettirme.


Resim Hareketi Uygulaması

Uygulamada bir adet resim olacak, buttona tıklayınca bu resim ekranın sol üst köşesinden hareket etmeye başlayacak. Ekranın sağ köşesine gelince yönünü aşağıya çevirecek. Ekranın alt köşesine gelince bu kez yönünü sola çevirecek ve sol alt köşeye gelince yukarı hareket etmeye başlayacak. Tekrar sol üst köşeye gelince ekranın sağına doğru harekete başlayacak. Bu böyle devam edip gidecek. Uygulamayı ücretsiz bir editör olan "Eclipse" ile yaptık.


Şimdi biraz bir programlama dilinde resim hareket ettirme konusunu konuşalım.

Bir programcı, kodlarla bilgisayara hükmedebilen bir kişidir. Yani bilgisayara kod ile her istediğini yaptırabilmelidir. Bir programlama dilini iyi bilmekle asla programcı olunmaz. Programcı algoritma kurabilmeli, önündeki sorunları çözebilmelidir. Yani bilgisayara her istediğini bir şekilde yaptırabilmelidir. Bunu ne kadar iyi yapabiliyorsa o kadar iyi programcıdır. Örneğin, Timer kodları genellikle derleyicilerle birlikte gelir veya kod yazım editörlerinde bu sınıf olur. Timeri uygulamaya dahil etmekle birlikte komutlarını ve tasarladığımız olay için nasıl kullanacağımızı bilmemiz gerekir. 

Oysa profesyonel bir programcı belki dakikalar içinde o kod yazım editörü ile kendisine istediği özellikleri verdiği bir timer oluşturabilir.

Profesyonel bir programcı olabilmek, uzun bir dönem kod yazmak ve uygulama geliştirmekle mümkündür.

Programlama dillerinde resim hareket ettirme bir dile ve algoritmaya hakim olabilmek için gereklidir. Bilgisayar ekranındaki bir veya daha fazla nesneyi istediğimiz gibi hareket ettirmek ve bu hareket sırasında farklı komutlar vermek, bizim algoritmamızı geliştirmemize yardımcı olur.

Bu uygulamaları yaparken en fazla ihtiyaç duyacağımız şeylerden birisi hazır çalışan kaliteli ve mini uygulama örnekleri bulmaktır. Bunları bulabilirsek editleyerek ve yeni özellikler katarak hem öğrenir hem de kendimizi geliştiririz.

Sanatsal Bilgi web sitesinde hemen tüm programlama dilleriyle algoritmik ve temel dil özellikleri ile ilgili örnekler mevcuttur. C++ ile Windows form uygulamaları, resim işleme örnekleri, atışlar ve serbest düşme hareketi ile birlikte C# ile de resim hareket ettirme, iki boyutlu diziler, PIC C ile yürüyen ışık uygulaması ve benzer birçok Windows ve PIC uygulaması yer alıyor. Şimdi resim hareketini Java ile yapacağız.

Şimdi tekrar kodlarımıza dönelim.

Uygulamada 4 adet hareket fonksiyonu yer alıyor. "Motion1-4" fonksiyonlarının her biri ekranın bir köşesindeki hareketi kontrol ediyor. Hangi fonksiyonun çalıştırılacağı "hareket_kod" adlı bir değişken ile kontrol ediliyor. Bu değişken 0 – 3 arasında değerler alıyor ve "Timer" fonksiyonunda o değere göre fonksiyonlar çalıştırılıyor. 

Ekranın uç noktaları aşağıdaki kod ile alınıyor.

gen=ekran.getWidth();

yuk=ekran.getHeight();


Aşağıdaki kod, “ekranın çözünürlüğünü al (En üst ve en alt değerler için lazım), resme x ve y sayılarını ata, x değişkenini 1 artır eğer x değeri ekranın sağ üst köşesinden (-gen- değeri) 100 piksel geride ise hareket kodunu 1 yap” şeklindedir.

Hareket kodu 1 olunca Timer eventi fonksiyonu değiştirecektir.

public static void Motion()

 {

  gen=ekran.getWidth();

  yuk=ekran.getHeight();

   picture1.setLocation(x,y);

   x++;

   if(x==gen-100)

   {

    hareket_kod=1;

   }

  

 }

BunnyMove


Resim ve buttonların nasıl eklendiği sayfa sonundaki linklerde açıklanmıştır.

Tavsiyemiz Eclipse de veya başka bir editör de olabilir. Önce boş bir java uygulaması yaratın. Otomatik hiçbir şey çağırmayın. Daha sonra boş bir sınıf yaratın. Sınıfa da otomatik bir şey eklemeyin. Acemiyseniz sınıf adı "BunnyMove" olsun. Daha sonra bu kodları kopyala yapıştır yapın. Çalışınca kendiniz yazmayı deneyin. Timerin 10 olan değerini 5 ve 30 yapmayı deneyin. Resmin yerini değiştirin. Bu şekilde aşina oluncaya kadar deneme yapın.

Kolay gelsin.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;
public class BunnyMove
{
//Global değişkenler tanımlanıyor
 static int x;
 static int y;
 static int z=0;
 static BufferedImage resim;
 static JFrame Window1;
 static JLabel picture1;
 static JLabel etiket1;
 static JButton button1;
 static JButton button2;
 static ImageIcon image1;
 static Dimension ekran=Toolkit.getDefaultToolkit().getScreenSize();
 private static double gen;
 private static double yuk;
 static Timer timer1;
 private static int hareket_kod=0;
 public static void main(String[] Args)
 {
//Pencere oluşturuluyor
  Window1=new JFrame("Resim Hareketi");
  Window1.setSize(1024,768);
  Window1.setExtendedState(JFrame.MAXIMIZED_BOTH);
  Window1.setLocation(5,5);
  Window1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//labeller, buttonlar ve resimlerin tanımlandığı fonksiyon çağrılıyor
  Controllers();
  Window1.setLayout(null);
  Window1.setVisible(true);
//Timer fonksiyonu tanımlanıyor ve eventi belirleniyor
  timer1 = new Timer(10, new ActionListener() 
  {
      public void actionPerformed(ActionEvent evt) 
      {
//hareket koduna göre fonksiyon çağıracak, burası her 10 ms de bir işleyecek. Her 10 ms de bir ilgili fonksiyon çağrılacak. Bu da her 10 ms de bir resmin 1 pixel hareket edeceğini gösteriyor.
       if(hareket_kod==0)
       {
        Motion();
       }
       else if(hareket_kod==1)
       {
        Motion2();
       }
       else if(hareket_kod==2)
       {
        Motion3();
       }
       else if(hareket_kod==3)
       {
        Motion4();
       }
       else
       {
        timer1.stop();
       }
      }    
  });
 }
 public static void Controllers()
 {
//Form nesneleri Main fonksiyonunu karışık tutmaması için burada bir sınıfta tanımlandı.
  String path2="C:\\Users\\PC\\eclipse-workspace\\BunnyMotion\\img\\bunny.jpg";
  image1=new ImageIcon(path2);
  picture1=new JLabel();
  picture1.setIcon(image1);
  picture1.setSize(100,100);
  picture1.setLocation(0,0);
  Window1.add(picture1);
  
  etiket1=new JLabel();
  etiket1.setSize(800,120);
  etiket1.setLocation(250,250);
  etiket1.setText("NESNELERİN HAREKETİ");
  Window1.add(etiket1);
  
  button1=new JButton();
  button1.setText("BAŞLAT");
  button1.setSize(150,50);
  button1.setLocation(250,420);
  
  button2=new JButton();
  button2.setText("DURDUR");
  button2.setSize(150,50);
  button2.setLocation(425,420);
  
  button1.addActionListener(new ActionListener()
  {
 public void actionPerformed(ActionEvent e)
 {
  Button1_Click();
 }
  }
);
  button2.addActionListener(new ActionListener()
  {
 public void actionPerformed(ActionEvent e)
 {
  Button2_Click();
 }
  }
);
  Window1.add(button1);
  Window1.add(button2);
  
 }
 public static void Motion()
 {
//ekranın çözünürlük değerlerini al
  gen=ekran.getWidth();
  yuk=ekran.getHeight();
 //Resmin koordinatlarını güncelle
   picture1.setLocation(x,y);
//x değerini 1 artır
   x++;
Eğer resmin ön ucu ekran köşesine geldiyse hareket kodunu değiştir.
   if(x==gen-100)
   {
    hareket_kod=1;
   }
  
 }
 public static void Motion2()
 {
  gen=ekran.getWidth();
  yuk=ekran.getHeight();
  
   picture1.setLocation(x,y);
   y++;
   if(y==yuk-150)
   {
    hareket_kod=2;
   }
 }
 public static void Motion3()
 {
  gen=ekran.getWidth();
  yuk=ekran.getHeight();
  
   picture1.setLocation(x,y);
   x--;
   if(x==0)
   {
    hareket_kod=3;
   }
  
 }
 public static void Motion4()
 {
   picture1.setLocation(x,y);
   y--;
   if(y==0)
   {
    hareket_kod=0;
   }
  
 }
 private static void Button1_Click()
 {
  timer1.start();
 }
 private static void Button2_Click()
 {
  timer1.stop();
 }
}


Java İle Timer Kullanımı


Java İle Resim İşlemleri


SANATSAL BİLGİ

22/02/2019

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM

COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI