Mengenal GDI+ untuk Menggambar pada Windows Form (Part 2)
GDI+ sebagai framework
bagi penggambaran grafis telah umum dipergunakan pada komputer Windows.
Setelah pada artikel sebelumnya Bisa Komputer telah membahas tentang dasar GDI+ maka kali ini kita akan membahas tentang animasi dalam GDI+ menggunakan dasar-dasar GDI+ pada artikel sebelumnya.
Animasi yang akan dibuat ada dua macam,
pertama animasi yang akan memperlihatkan sebuah bola yang akan
memantul-mantul pada area Windows forms dan animasi yang akan
menggunakan sprites untuk memperlihatkan seorang tokoh yang benar benar
tampak hidup seperti dalam game pada artikel selanjutnya. Semua code di sini dibuat di Microsoft Visual Studio Express 2008.
Animasi Bola
Bola yang akan dibuat merupakan lingkaran yang digambar dengan method DrawEllipse milik Graphics class
yang sudah kita bahas pada artikel sebelumnya. Untuk membuatnya dapat
seolah-olah bergerak, maka posisi bola tersebut harus diubah sedikit
demi sedikit dalam interval yang singkat agar terbentuk bayangan
seolah-olah gambar bergerak (yups seperti teknik animasi Walt
Disney). Karenanya komputer pada setiap interval waktu tertentu harus
menghitung lokasi baru dari gambar bola dengan mempergunakan rumus jarak = kecepatan x waktu berjalan. Sementara kecepatan sendiri dalam bidang 2D terbagi menjadi 2 yaitu kecepatan X dan kecepatan Y seperti ilustrasi di bawah :
Rumus Jarak
Untuk deteksi tabrakan sebenarnya tidak
ada yang terlalu istimewa, hanya menggunakan aturan sudut datang sama
dengan sudut pantul atau pergi seperti ilustrasi di bawah :
Aturan Sudut
Membuat Projek Animasi
Sekarang, saatnya kita mulai membuat project animasi bola ini :
- Pertama-tama buat sebuah Project WindowsForm applicationbaru dan beri nama ‘ballAnimation’.
Project Windows Form Baru
- Drag sebuah pictureBox seperti pada gambar.
- Drag sebuah timer ke dalam form, timer tidak akan terlihat pada form seperti pictureBox. Tetapi akan muncul di bagian lain di bawah Windows forms.
Tampilan Timer pada Form - Timer nantinya akan dipakai untuk menggerakan object yang digambar sesuai dengan interval waktu tertentu.
- Set atribut properti pada object-object yang baru Anda masukkan dengan cara klik pada object bersangkutan dan klik kanan kemudian pilih Properties, menjadi seperti berikut :
– Form (klik pada windows form yang ada pada layar dan pilih properties)
Double Buffered : true
– PictureBox1
Border Style : FixedSingle
– Timer1
Interval: 1 - Seperti yang telah dijelaskan pada artikel sebelumnya yaitu mengenal GDI+ part1, siapkan instance dari Graphics class dan isi dengan bitmap kosong dari PictureBox1.Image. Ubah bagian source code dengan tekan F7 menjadi seperti kode di bawah :
123456789101112131415161718192021222324252627282930313233343536373839404142434445
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespace ballAnimation{publicpartialclassForm1:Form{Graphics g;Rectangle layar;public Form1(){InitializeComponent();pictureBox1.Image=newBitmap(this.Width,this.Height);g=Graphics.FromImage(pictureBox1.Image);layar=newRectangle(this.pictureBox1.Location,this.pictureBox1.Size);}}} - Sekarang tentang bola yang akan ditampilkan. Bola akan berupa lingkaran yang akan terus memantul dalam sebuah kotak pictureBox jika ia menabrak batas layar yang berbentuk persegi.
- Bola yang akan ditampilkan akan dijelaskan pada sebuah class bernama
Bola. Kelas ini memiliki atribut berupa lokasi bola, besar bola, warna,
sudut, kecepatan dan besar layar tempat ia digambarkan. Beserta
beberapa method:
– Update : dipergunakan untuk melakukan pengecekan tabrakan dan menghitung langkah kemajuan bola. Method ini dipanggil setiap interval timer (1 ms)
– Draw : untuk menggambar bola pada layar berdasarkan hasil perhitungan dari method Update()
– CekTabrakan : sebagai method yang akan dipanggil oleh Update untuk mengecek terjadinya tabarakan.
Membuat Class Bola
Sekarang
untuk membuat class Bola : Terdapat 2 cara untuk membuat class dalam
C#, menulisnya langsung dalam file Form1.cs di bawah class Form1 atau
mempergunakan file terpisah. Dalam contoh kali ini penulis akan
mempergunakan file terpisah yang dirasa akan memberikan file source yang tidak terlalu rumit.
- Pertama, pilih menu Project > Add Class.
- Kemudian pilih Class dan beri nama Bola.
Memilih Class - Anda akan mendapati file baru terbuka bernama Bola.cs. Ubah isi dari file tersebut menjadi seperti kode di bawah :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;//masukkan referensi ke System,Drawing//sehingga dapat akses ke Rectangle,PointF,dsbusingSystem.Drawing;namespace ballAnimation{//jadikan publicpublicclassBola{//untuk menyimpan posisiBola dalam floatPointF posisiBola;//menyimpan besar bola dalam float20x20SizeF besarBola=newSizeF(20.0f,20.0f);//informasi sudut dan kecepatan boladouble sudutBola;double kecepatanBola=5.0;//menyimpan besarnya layarRectangle kotakLayar;//warna bolaPen pena;///<summary>///Konstruktor kelas Bola///</summary>///<paramname="x">posisi awal-x</param>///<paramname="y">posisi awal-y</param>///<paramname="sudutAwal">sudut awal</param>///<paramname="layar">besar layar-Rectangle</param>public Bola(float x,float y,double sudutAwal,Rectangle layar){this.posisiBola=newPointF(x,y);this.kotakLayar=layar;this.sudutBola=sudutAwal;//warna bola merah dan tebal3satuanthis.pena=newPen(Color.Red,3.0f);}///<summary>///Untuk menjalankan bola///</summary>///<paramname="g">graphicsclassinstance</param>publicvoid Update(Graphics g){//gambarkanDraw(g);//cek tabrakancekTabrakan();//ubah posisiBola berdasarkan rumusposisiBola.X+=(float)(kecepatanBola*Math.Sin(sudutBola));posisiBola.Y-=(float)(kecepatanBola*Math.Cos(sudutBola));}///<summary>///prosedur penggambaran///</summary>///<paramname="g">graphicsclassinstance</param>privatevoid Draw(Graphics g){//gambarkan bola dengan warna pena//posisi di posisiBola.X dan Y//dengan besar Width x Heightg.DrawEllipse(pena,posisiBola.X,posisiBola.Y,besarBola.Width,besarBola.Height);}///<summary>///fungsi pengecekan tabrakan dengan layar///</summary>privatevoid cekTabrakan(){//jika bola menembus batas kiri dan kanan layar maka sudut//bola dibuat=-sudut bolaif(posisiBola.X<=0|| posisiBola.X+besarBola.Width>=kotakLayar.Width){sudutBola=-sudutBola;}//jika bola menembus batas atas dan bawah layar maka sudut//bola adalah180derajat//dalam radian(0.5*PI)dikurangi sudut bolaif(posisiBola.Y<=0|| posisiBola.Y+besarBola.Height>=kotakLayar.Height){sudutBola=Math.PI-sudutBola;}}}}
Menggunakan di Class Form 1
Kelas Bola telah selesai, sekarang kita akan menggunakannya di class Form1.
- Pertama kita akan membuat instance dari class Bola, tambahkan di dalam class Form1 :
1
Bola bola; - Tambahkan
juga sebuah generator bilangan acak yang nanti akan dipergunakan untuk
memberi nilai awal sudut bola yang nantinya akan menentukan arah bola.
Tambahkan baris berikut pada class Form1 :
1Random generator=newRandom();<span style="text-align: justify;"> </span> - Kemudian di dalam kontruktor Form1 ( public Form1()) tambahkan syntax untuk instansiasi bola :
parameter pertama dan kedua seperti penjelasan pada konstruktor class Bola, adalah x dan y posisi awal bola muncul. Parameter kedua adalah sudut yang harus dimiliki bola pada kondisi awal, dalam contoh ini sudut ditentukan secara acak dari 360 derajat kemungkinan ( dalam radian 2 * PI ). NextDouble akan menghasilkan bilangan pecahan acak antara 0 hingga 1. Parameter terakhir adalah besar layar ( dalam hal ini adalah pictureBox1)1bola=newBola(50,50,generator.NextDouble()*2*Math.PI,layar); - Secara
default timer pada Form tidak langsung berjalan begitu project
dieksekusi maka tambahkan juga baris perintah ini dalam konstruktor :
1timer1.Enabled=true;<span style="text-align: justify;"> </span> - Kemudian sekarang tambahkan method untuk meng-handle apa saja yang harus dilakukan setiap kali timer berdetik. Buka Form1.cs Designer atau tekan Shift + F7 dan klik dua kali pada object timer1 di bawah layar, maka akan muncul sebuah method baru yang otomatis dibuat di Form1.cs file. Tambahkan isi dari method ini sehingga menjadi :
1234567891011121314151617privatevoid timer1_Tick(object sender,EventArgs e){//setiap1ms bersihkan layarg.Clear(Color.Transparent);//jugaupdateposisi bolabola.Update(g);//kemudian gambar ulang!!pictureBox1.Invalidate();} - Sekarang semuanya sudah lengkap. Tekan F5 dan jika semua benar maka akan tampak sebuah bola yang memantul setiap kali menyentuh layar.
Bola Memantul

0 komentar:
Posting Komentar