Tujuan Setelah mempelajari bab ini, Pelajar diharapkan mampu untuk :
• Memahami event handling level rendah dalam MIDP
• Menggambar dan menampilkan teks, gambar, garis, kotak, dan sudut
• Menentukan warna, huruf, dan coretan untuk operasi menggambar
• Memahami dan menggunakan class Canvas dan Graphic
• Mengetahui bagaimana menggunakan GAME API
• Menggambar grafik berskala
Pengenalan
Pada bab ini, kita akan berhadapan langsung dengan layar. Kita akan mempelajari class Canvas, dimana akan menjadi pendukung dari proses menggambar kita. Kita juga akan menyelidiki ke dalam class Graphic, dimana memiliki metode untuk menggambar garis, kotak, sudut, dan teks. Kita juga akan membahas huruf, warna dan gambar.
Canvas
Canvas adalah subclass dari Displayable. Itu adalah sebuah class abstrak yang harus di-extend sebelum sebuah aplikasi dapat menggunakan fungsi-fungsi yang ada. Canvas dapat digabungkan dengan subclass Displayable level tinggi yaitu Screen. Program dapat pindah ke dan dari Canvas dan Screen. Canvas menggambarkan metode-metode event handling kosong. Aplikasi harus mengesampingkan mereka untuk handle event. Class Canvas menggambarkan sebuah metode abstrak yang disebut paint(). Aplikasi menggunakan class Canvas harus menyediakan sebuah implementasi untuk metode paint().
Sistem Koordinat
Sistem koordinat dari Canvas adalah berbasis nol. Koordinat x dan y dimulai dengan nol. Pojok kiri atas dari Canvas berkoordinat (0,0). Koordinat x bertambah dari kiri ke kanan. Sedangkan koordinat y bertambah dari atas ke bawah. Metode getWidth() dan getHeight() mengembalikan nilai lebar dan tinggi berturut-turut.
Perintah
Seperti halnya list, textBox, dan form, Canvas juga mempunyai Command yang disediakan dan dapat merespon untuk event Command.
Event key Subclass
- dari Canvas dapat merespon sebuah event tombol dengan metode-metode sebagai berikut : keyPressed(int keyCode) : Dipanggil ketika kunci ditekan
- keyRepeated(int keyCode) : Dipanggil ketika kunci diulang
- keyReleased(int keyCode) :Dipanggil ketika kunci dilepas
Aksi Permainan
Masing-masing kode tombol bisa dipetakan menjadi sebuah aksi game. Sebuah key
code bisa dipetakan kepada aksi sebuah game. Class Canvas mendefinisikan aksi
game ini : UP, DOWN, LEFT, RIGHT, FIRE, GAME_A, GAME_B, GAME_C, GAME_D.
Sebuah program dapat menerjemahkan sebuah key code ke dalam aksi game
menggunakan metode getGameAction(keyCode)
Event Pointer
Disamping dari event key, program MIDP juga dapat mengatasi event pointer. Hal ini
bersifat benar jika sebuah perangkat memiliki sebuah pointer dan hal tersebut
diimplementasikan di dalam sistem JAVA pada sebuah perangkat.
Metode hasPointerEvents() mengembalikan nilai true jika sebuah perangkat
mendukung pointer yang bersifat ditekan dan dilepaskan. Metode
hasPointerMotionEvents() mengembalikan nilai true jika sebuah perangkat
mendukung event gerakan dari pointer.
Grafik
Class
Graphic adalah class utama untuk menulis teks, menggambar, garis, kotak
dan sudut. Dia memiliki metode untuk menentukan warna, huruf, dan coretan.
Warna
Class Display memiliki metode untuk menentukan apakah sebuah perangkat memiliki
fasilitas yang mendukung layar berwarna atau layar monochrome pada sebuah
perangkat.
Huruf
Sebuah huruf memiliki tiga atribut yaitu bentuk, type, dan ukuran. Huruf tidak
diciptakan oleh aplikasi. Sebagai gantinya, sebuah aplikasi meminta sistem untuk
memilih model atribut huruf dan sistem mengembalikan huruf yang sesuai dengan
model atribut yang diminta. Sistem tidak menjamin akan mengembalikan semua
atribut huruf yang dipilih. Jika sistem tidak memiliki huruf yang sesuai dengan
permintaan, dia akan mengembalikan sebuah huruf hampir mirip dengan atribut
yang diminta.
Style Coretan
Metode setStrokeStyle(int style) menetapkan style coretan bahwa akan digunakan
untuk menggambar garis, sudut, dan kotak. Style coretan tidak mempengaruhi teks,
gambar, dan operasi mewarnai.
Clipping
Suatu bidang clipping adalah suatu kotak di dalam objek Graphics yang ada. Setiap
operasi grafik hanya akan mempengaruhi pixel-pixel didalam area clip. Pixel yang
berada diluar clipping tidak akan dipengaruhi oleh setiap operasi grafik.
Melukis gambar
Gambar digambar dengan metode drawImage()
public void drawImage(Image img, int x, int y, int anchor)
Selama dengan drawString, x dan y adalah koordinat titik anchor. Perbedaannya
adalah bahwa vertikal anchor tetap adalah VCENTER yang berdasar BASELINE.
Anchor harus berupa kombinasi dari horizontal constant(LEFT, HCENTER atau RIGHT)
dan vertical constant (TOP,VCENTER atau BOTTOM). Horizontal dan Vertical
Constants dikombinasikan dengan menggunakan operator bitwise OR(|).
Game API
Aplikasi games memiliki peranan utama pada aplikasi mobile. Sebagian besar
aplikasi dibuat pada pangsa pasar mobile adalah games. Action, strategy, board and
card games dan sebagainya, seluruhnya terdapat pada aplikasi mobile.
Sebagian besar produsen game telah membuat API tersendiri untuk berbagai fungsi
bermain game yang hanya akan bekerja pada handset yang dibuat oleh perusahaan
tersebut. Hal ini berarti bahwa sebuah game yang dibangun menggunakan API dari
salah satu produsen tidak akan berjalan pada device hasil produksi dari produsen
lain.
Untuk menjembatani perbedaan ini, MIDP versi 2 telah memiliki fungsionalitas dasar
yang secara spesifik ditujukan aplikasi game.
Class utama Game API dari MIDP adalah class GameCanvas. Class GameCanvas
merupakan perluasan dari class Canvas yang kita gunakan dalam pembuatan low –
level user interface. Dua kelemahan utama dari class Canvas dalam pemrograman
game adalah tidak memadainya kemampuan untuk mengatur proses repaint dan
ketidakmampuan untuk mengatur bagaimana pointer events serta quick keys
diteruskan pada canvas.
Komponen user interface dari MIDP umumnya berupa event driven. Events berupa
antrian berurutan dan diteruskan terhadap aplikasi satu persatu, beserta tunda
waktu antar waktu dimana event dibuat (key press).
GameCanvas memungkinkan aplikasi mengumpulkan events yang terbuat dan
melakukan proses repaint pada canvas dengan cepat. Struktur program menjadi
lebih bersih karena terdapat rangkaian perulangan utama dimana proses painting
dan pengumpulan events dilakukan.
GameCanvas menggunakan teknik double buffering. Seluruh proses pembuatan
interface dilakukan di off-screen buffer, kemudian di transfer dari area buffer
tersebut menuju area yang terlihat pada canvas. Aplikasi anda harus menggunakan
instance method dari class Graphics berupa method getGraphics(). Setiap
pemanggilan terhadap method ini mengembalikan sebuah instance baru dari offscreen buffer yang anda gunakan dalam proses pembuatan user interface.
Untuk memperbaharui screen tersebut, anda harus memanggil flushGraphics() untuk
melakukan proses repaint secara cepat dengan isi dari off-screen buffer. Perhatikan
bahwa anda hanya perlu memanggil method getGraphics() sekali saja, karena
sebuah buffer teralokasi setiap kali anda memanggil method ini.
Layers
Layers adalah elemen visual dari sebuah screen. Layer adalah abstract class yang
merepresentasikan objects pada screen. Sprite dan TiledLayer adalah subclasses dari
class Layer.
Tiled Layer adalah rangkaian dari beberapa persegi empat yang berukuran sama dan
gambar – gambar yang memadai untuk ditempatkan pada persegi empat tersebut.
Layer ini dibangun dengan menempatkan gambar – gambar dan elemen – elemen
visual dalam area ini. Sebuah gambar dapat digunakan oleh lebih dari satu persegi
empat sehingga dapat menghemat ruang dan memory. Tiled Layers umumnya
digunakan sebagai background pada game.
Sprites
Sprites adalah objects grafis yang anda lihat pada game. Object ini dapat berupa
character, kunci, tombol, pintu ataupun peluru. Sebuah sprite bersifat statis ataupun
animasi.
Animasi sprite terbuat dari beberapa elemen sprite dengan perbedaan – perbedaan
kecil dan tersusun sedemikian hingga membentuk kesan bergerak. Rangkaian sprite
ini disebut sebagai frame.
Layer Manager
Class LayerManager akan memberikan kemudahan dalam pengaturan keseluruhan
Sprites dan TiledLayers. LayerManager mengatur seluruh Sprites dan TiledLayers
yang anda buat. Dan anda tidak perlu untuk membuat seluruh object tersebut satu
persatu. LayerManager yang akan melakukannya untuk anda. LayerManager juga
mengatur pengurutan objek dari dasar hingga paling atas.
Scalable 2D Graphics
JSR 226 menyediakan method untuk proses rendering dan transforming atas grafis
vector-based 2D.
Format gambar raster-based seperti GIF melakukan proses encode terhadap
pewarnaan pada tiap-tiap pixel pada area persegi empat yang menunjukkan bentuk
gambar. Gambar dengan tipe vector-based hanya memiliki instruksi penggambaran
yang menentukan bagaimana pixel-pixel dari gambar tersebut harus diwarnai.
Vector tersebut merepresentasikan sebuah gambar yang berukuran jauh lebih kecil,
sebuah nilai lebih dalam penggunaan resource pada mobile devices.
Key Codes
Buatlah sebuah MIDlet yang akan menampilkan kode dan nama dari tombol yang
ditekan oleh user. Gunakan sebuah Canvas dan tempatkan keterangan kode dan
nama tepat di tengah dari tampilan pada layer.