Pemrograman DirectX dengan DelphiX Teguh Wiharko, S.T. Dosen Luar Biasa STMIK Sumedang Abstrak Animasi dan game sejak dulu merupakan satu bidang ilmu dalam dunia pemrograman yang sangat menarik untuk diikuti dan dipelajari. Terdapat banyak hal yang sangat menarik yang membuat seorang programmer akan merasa betah untuk mempelajari bidang ini. Game yang dahulu hanya dapat dinikmati dalam tampilan dua dimensi sekarang dapat dinikmati dalam tampilan tiga dimensi dengan realitas yang sangat tinggi. Game komputer juga merupakan ladang bisnis yang sangat menjanjikan, jutaan dolar telah dikeluarkan oleh berbagai perusahaan perangkat lunak untuk melakukan eksperimen dalam menemukan algoritma-algoritma tercanggih sampai dengan pembuatan perangkat keras pendukung game yang paling terkini. Salah satu dari teknologi antarmuka yang paling banyak digunakan oleh para developer game di seluruh dunia dalam mengembangkan game-game mereka adalah Microsoft DirectX. Sayangnya pemrograman DirectX sangat sulit dan biasanya hanya bahasa pemrograman C/C++ saja yang digunakan untuk menulis kode programnya. Hingga akhirnya Hiroyuki Hori menulis sekumpulan komponen Delphi yang mempermudah para programmer Delphi untuk menulis aplikasi berbasis DirectX, yang dinamakan DelphiX. Dengan hadirnya DelphiX ini diharapkan para programmer Delphi akan lebih produktf lagi menulis aplikasi berbasis DirectX terutama aplikasi animasi dan game. Kata kunci : DirectX, DelphiX, game, animasi
Pendahuluan Borland Delphi merupakan bahasa pemrograman berorientasi objek yang berbasiskan kepada bahasa pemrograman Pascal. Biasanya Borland Delphi digunakan oleh programmer untuk menulis aplikasi database dan aplikasi lainya berbasis Windows. Borland Delphi digunakan karena kemampuannya dalam mengakses bermacam-macam jenis database baik melalui ODBC (Open Database Connectivity) maupun secara langsung (direct). Borland Delphi mendukung penggunaan OLEDB, ADODB, COM, ActiveX, CORBA dan MIDAS. Borland Delphi merupakan RAD (Rapid Application Development) berbasis VCL (Visual Component Library) yang pemakaiannya semudah Visual Basic tetapi mempunyai kecepatan setara C++. Tetapi dalam bidang pemrograman animasi dan game masih sedikit sekali programmer yang menggunakan Delphi dikarenakan tidak tersedianya komponen-komponen yang mendukung pemrograman teknologi antarmuka game seperti OpenGL atau DirectX. Walaupun tetap dapat dilakukan tetapi sangat rumit dan memakan waktu pengembangan yang lama. Dengan menggunakan komponen DelphiX yang dikembangkan oleh Hiroyuki Hori membuat pemrograman DirectX menjadi semudah membuat aplikasi database. Microsoft DirectX 1. Apa Itu DirectX? Microsoft DirectX merupakan suatu kumpulan teknologi yang didesain untuk mempermudah pemrograman multimedia dan game yang berjalan pada Komputer berbasis windows. DirectX menyediakan fungsi-fungsi atau biasa disebut DirectX API (Application Programming Interface) dan perangkat bantu (tool) yang dapat digunakan oleh para programmer dan developer aplikasi multimedia dan game sehingga mereka dapat membuat program tanpa perlu memikirkan perangkat keras yang akan digunakan. DirectX mendukung beragam fungsi multimedia, termasuk fungsi untuk mengembangkan aplikasi grafik 3D, full-motion video, animasi 3D, hingga surround sound.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
1
Microsoft mengembangkan DirectX dengan 2 tujuan, yaitu: Agar aplikasi multimedia yang dibuat dapat berjalan pada setiap PC berbasis windows apapun perangkat keras yang dipergunakan. Agar aplikasi berbasis multimedia yang dibuat dapat memanfaatkan semaksimal mungkin kemampuan perangkat keras yang digunakan.
2. Arsitektur DirectX Arsitektur DirectX terdiri dari dua lapisan perangkat lunak (software layers) yang melayani permintaan data perangkat keras dari objek-objek DirectX. HAL (Hardware Abstraction Layer) HEL (Hardware Emulation Layer) HAL dan HEL keduanya menyediakan device yang dapat menentukan apakah suatu objek dirender langsung oleh perangkat keras atau dengan perangkat lunak penerjemah dari fungsi-fungsi perangkat keras tersebut. Ketika suatu aplikasi yang menggunakan DirectX dijalankan, maka akan dilakukan pengecekan terhadap semua perangkat yang tersedia dan memilih perangkat-perangkat yang cocok untuk digunakan oleh aplikasi tersebut. Setelah program aplikasi multimedia atau game tersebut berjalan maka tidak dapat lagi kita memilih untuk mengunakan perangkat yang lain tanpa direstart terlebih dahulu. Sehingga proses rendering objek-objek pada suatu program aplikasi DirectX hanya dapat dijalankan dengan salah satu dari dua pilihan, yaitu proses rendering menggunakan perangkat keras atau menggunakan perangkat lunak. DirectX tidak mendukung proses rendering campuran antara perangkat keras dan perangkat lunak. Dalam pemrograman berorientasi objek, suatu objek merupakan suatu bagian tunggal yang terdiri dari data dan fungsi-fungsi untuk memanipulasi data tersebut. Contohnya adalah, suatu objek DirectX dapat berupa sebuah bagian program yang mengerjakan seluruh proses rendering animasi 3D pada suatu game. DirectX
HAL
HEL
Hardware
Gambar 1. Arsitektur DirectX 2.1. Hardware Abstraction Layer (HAL) HAL terdiri dari dua bagian, the original HAL dan the transform and lighting HAL (TnLHAL) yang diperkenalkan mulai DirectX 7.0. Melalui kedua bagian HAL tersebut, objek-objek DirectX mempergunakan fasilitas-fasilitas yang ada pada suatu perangkat keras secara maksimal. Dalam hal ini objek-objek DirectX melalui HAL, akan mencari dan menentukan apakah pada komputer tersebut terdapat perangkat keras yang mendukung penggunaan suatu objek DirectX. jika perangkat keras yang sesuai ditemukan, maka akan dicatat pada sebuah tabel untuk digunakan selama program dijalankan. Contohnya, bila suatu PC menggunakan kartu 3D graphics accelerator yang dapat mempercepat proses rendering suatu objek 3D, maka objek DirectX akan mencatat kemampuan kartu tersebut, dan kemudian akan memakainya bila diperlukan.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
2
TnLHAL, yang diperkenalkan mulai DirectX versi 7.0, memasukkan seluruh kemampuan dari original HAL ditambah dengan kemampuan untuk melakukan transformasi 3D dan operasi-operasi pencahayaan menggunakan perangkat keras jika ternyata pada PC tersebut telah terpasang kartu grafik 3D. 2.2. Hardware Emulation Layer (HEL) HEL merupakan bagian dari DirectX yang digunakan untuk melakukan proses penerjemahan/emulasi dari suatu perangkat keras bila ternyata pada komputer tersebut tidak terpasang kartu grafik 3D. Para programmer dapat menggunakan fungsi-fungsi HEL untuk membangun, mengevaluasi, dan melakukan pengetesan kemampuan dari program aplikasi dan game yang mereka buat, bahkan tanpa memasang perangkat keras yang dibutuhkan. HEL terdiri dari 3 bagian, sebagai berikut: RGB Emulation Reference device Null device 2.2.1. RGB Emulation RGB emulation merupakan suatu perangkat bantu yang digunakan untuk mengetahui bagaimana program atau game yang dibuat dirender via hardware accelerator. Dengan RGB emulation maka seluruh proses rendering dilakukan sepenuhnya menggunakan perangkat lunak. Untuk menghasilkan hasil yang maksimal, RGB emulation akan melakukan optimasi pada beberapa proses rendering. Hal ini mengakibatkan gambar yang dihasilkan tidak akan sebaik bila menggunakan hardware accelerator. 2.2.2. Reference Device Reference device mengimplementasikan seluruh proses rendering menggunakan software emulator, dengan seakurat mungkin. Reference device tidak akan melakukan optimasi pada gambar yang dirender karena yang paling penting adalah gambar harus ditampilkan sebaik-baiknya. Para programmer dapat mempergunakan reference device untuk menentukan bagaimana suatu efek visual akan tampak pada suatu aplikasi atau game jika dirender via hardware accelerator. Selain itu para pembuat perangkat keras dapat mengunakannya untuk memastikan bahwa perangkat keras yang dibuat mendukung DirectX. Aplikasi-aplikasi benchmark seperti ZD abs 3D WinBench dan Microsoft Windows Hardware Quality Labs (WHQL) D3D test merupakan beberapa aplikasi yang menggunakan reference device untuk memastikan bahwa suatu hardware accelerator 3D telah mengimplementasikan seluruh fasilitas DirectX dengan benar. 2.2.3. Null Device Null device melakukan proses rendering pada graphics pipeline sesuai langkah-langkah geometri, tetapi tanpa mengirimkan data ke HAL (yang termasuk didalamnya adalah proses rasterisasi pada pipeline). Meskipun demikian, null device sangat berguna untuk memastikan kemampuan kerja suatu sistem dan juga untuk menentukan efesiensi dari HAL device dengan cara membandingkan kemampuan kerja HAL device dengan kemampuan kerja dari null device. Null device dapat dipilih pada perangkat lunak benchmarking seperti 3D WinBench dll. Null device akan menerjemahkan suatu gambar 3D untuk diletakkan pada layar 2D, tetapi hanya fungsi-fungsi geometri saja yang dikerjakan tetapi tidak fungsi-fungsi rasterisasi. 3. Pengenalan Hardware Accelerator Program aplikasi dan game yang dibuat mengunakan DirectX APIs dapat mengambil keuntungan dari kemampuan perangkat keras terbaru meskipun program yang dibuat telah beredar dipasaran. Hal ini terjadi karena sebelum suatu program aplikasi dijalankan, directX akan mencari
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
3
dan mempergunakan seluruh kemampuan dari kartu grafik yang terbaru bila telah terpasang pada suatu komputer. Contohnya, ketika perusahaan microprosesor Intel memperkenalkan teknologi multimedia extensions (MMX), Microsoft segera menambahkan kemampuan pada DirectX untuk dapat memanfaatkan segala kelebihan dari teknologi tersebut. Sehingga program-program multimedia dan game yang mengunakan teknologi DirectX dapat mengambil keuntungan dari meningkatnya kecepatan yang merupakan hasil dari prosesor MMX tanpa perlu dimodifikasi atau ditulis ulang. 4. Komponen-komponen DirectX DirectX terdiri dari sekelompok fungsi-fungsi atau API yang dapat digunakan untuk mengakses secara langsung ke seluruh perangkat keras yang telah terpasang disuatu komputer, seperti kartu grafik 3D dan kartu suara yang terbaru. DirectX API menyediakan fungsi low level untuk mengontrol perangkat seperti kartu grafik 2D dan 3D, sound mixing, keyboard, mouse, dan joystick. Berikut ini penjelasan dari komponen-komponen DirectX. 4.1. DirectDraw DirectDraw digunakan untuk mengakses seluruh kemampuan dari bermacam-macam kartu video tanpa perlu tergantung pada suatu tipe kartu video. DirectDraw dapat mengakses akses langsung ke bit-blok transfer, hardware overlay, dan page flipping, dan menyediakan kemampuan menyimpan data layar langsung ke memori pada kartu video, sehingga kecepata transfer bit-block menjadi sangat cepat. Komponen ini merupakan objek induk dari semua komponen grafik seperti DirectShow dan Direct3D. 4.2. Direct3D Direct3D merupakan kumpulan fungsi-fungsi yang menyediakan kemampuan rendering objek 3D berbasis perangkat lunak. Direct3D bekerja secara real-time untuk melakukan rendering objek 3D seperti transformasi, pencahayaan, dan rasterisasi. Sampai DirectX 6.0, operasi geometri direct3D selalu dilakukan secara perangkat lunak. Pada DirectX 7.0, operasi geometri direct3D dapat dilakukan baik secara perangkat keras maupun perangkat lunak. 4.3. DirectInput DirectInput menyediakan akses yang cepat dan konsisten ke setiap joystick analog maupun digital. Komponen ini juga mendukung penggunaan joystick force-feedback yang menyediakan umpan balik pada pemain game sehingga kontrol game menjadi lebih realistik. 4.4. DirectSound DirectSound merupakan komponen audio. Komponen ini merupakan antarmuka untuk fungsi pencampuran suara, manipulasi volume suara, frekuensi, dan lain-lain. 4.5. DirectPlay DirectPlay merupakan antarmuka perangkat lunak yang menyediakan kemampuan suatu game untuk melakukan komunikasi melalui jaringan LAN, internet, modem dan serial. DirectPlay menyediakan fungsi-fungsi yang dibutuhkan untuk membuat suatu multiplayer game. 4.6. DirectMusic DirectMusic menyediaan arsitektur multitiered untuk menciptakan interaktif, variatif, konsisten playback, dan memperbaiki kualitas MIDI (musical instrument digital interface) yang digunakan pada efek suara dan musik. DirectMusic bukan merupakan sistem untuk membuat musik dari algoritma tertentu, tetapi menyediakan lingkungan untuk komposer, designer musik, dan developer untuk mengembangkan sound efek pada program aplikasi maupun game yang mereka buat. DirectMusic mensupport DLS (downloadable sounds), yang mengijinkan programmer untuk
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
4
membuat suatu set instrument dari file-file wave, dan kemudian merendernya menjadi file audio melalui bantuan perangkat lunak maupun perangkat keras synthesizer. 4.7. DirectShow DirectShow digunakan untuk melakukan mengambil (capturing) data-data baik audio maupun video. 5. Direct3D Retained Mode Direct3D retained mode merupakan mode untuk menyederhanakan pembuatan dan melakukan animasi 3D. Mode ini sudah tidak dilakukan pengembangannya lagi oleh Microsoft tetapi tetap disertakan untuk kompatibilitas. 6. DirectX Setup DirectX Setup menyediakan cara untuk membuat proses setup program yang menggunakan directX menjadi lebih mudah. Jika setup tidak dapat mengenali konfigurasi suatu perangkat keras, maka akan menginformasikan hal tersebut kepada pemakai. Kemudan akan menyarankan agar pemakai mem-bypass instalasi driver perangkat keras tersebut atau kembali ke setting awal sebelum driver tersebut dipasang. 7. Sejarah DirectX Versi DirectX Keterangan 1.0 DirectX 1.0 terdiri dari 4 komponen dasar, yaitu: DirectDraw, DirectInput, DirectPlay, dan DirectSound. 2.0 DirectX 2.0, pada versi ini ditambahkan kemampuan pengolahan grafik 3D, yaitu Direct3D. 3.0 DirectX 3.0, pada versi ini ditambahkan file-file baru DirectInput, seperti komponen untuk kontrol joystick, dan update virtual math coprocessor untuk mendukung teknologi Intel MMX. Komponen baru DirectSound3D juga disertakan sebagai tambahan pada DirectSound. 3.0a dan 3.0b Kedua versi DirectX ini dibuat untuk memperbaiki beberapa kesalahan kecil pada versi sebelumnya, tetapi tidak menambahkan fasilitas baru. 5.0 DirectX 5.0 memperkenalkan beberapa fasilitas baru dan menambah kemampuan dari versi sebelumnya termasuk vertex buffers, dukungan untuk kontrol force-feedback, 3D audio, dukungan untuk multimonitor game (windows 98), dukungan yang lebih baik untuk teknologi MMX dan meningkatkan kualitas user interface. Pada versi ini juga diperkenalkan DirectX Setup. Media layer yang merupakan kumpulan dari layanan tingkat tinggi (high level services), juga ditambahkan. 5.2 DirectX 5.2 menambahkan beberapa perbaikan dari versi sebelumnya dan update DirectPlay. 6.0 DirectX 6.0 memperkenalkan beberapa fasilitas 3D, termasuk dukungan untuk single-pass multitexturing, bump mapping, texture compression, dan stencil buffers. DirectX 6.0 juga menambahkan panel kontrol DirectX baru, memperbaiki kualitas MMX, dan dukungan terhadap teknologi AMD 3Dnow. 6.1 Pada versi ini ditambahkan fungsi-fungsi DirectMusic API, yang sebenarnya direncanakan untuk dirilis pada DirectX 6.0.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
5
DirectX 7.0 Fasilitas-fasilitas yang ditambahkan pada DirectX 7.0 : TnLHAL, yang mempercepat tampilan transformasi 3D dan operasi-operasi pencahayaan. Dengan komponen ini detail model 3D menjadi lebih baik, serta ditambahkan pula beberapa teknik simulasi yang lebih modern. Vertex blending, yang mengijinkan perangkat lunak untuk melakukan operasi-operasi transformasi secara bersamaan, yang setiap operasinya menggunakan koefisien berat yang beragam. Koefisien berat tersebut dapat dimasukan secara frame per frame untuk membuat objek solid yang lebih fleksibel. Dengan fasilitas ini operasi morphing pada objek 3D dapat dilakukan tanpa membutuhkan bantuan dari microprosesor untuk menghitung posisi dari setiap vertex pada objek tersebut. Mendukung cubic environment mapping, yaitu suatu teknik yang mempermudah kita melakukan simulasi pada lingkungan 3D yang dibuat, sperti refleksi pada air. Contohnya, reflection maps dapat digunakan untuk membuat sebuah objek sebagai permukaan refleksi tanpa perlu menghitung refleksi dari setiap titik pada permukaan objek tersebut. Algoritma baru pada komponen 3D Sound. Dukungan untuk Downloadable sounds Level 2 (DLS2). Kumpulan klas baru yang merupakan jembatan data dari aplikasi Visual Basic ke DirectX, sehingga seluruh komponen DirectX 7.0 dapat mendukung aplikasi yang dibuat dengan Visual Basic. Perbaikan ini membuat kemampuan DirectX dapat dinikmati oleh para programmer Visual Basic. Catatan : Morphing adalah suatu teknik animasi yang digunakan untuk menggabungkan 2 gambar sehingga menjadi satu gambar. Prosesnya adalah gambar1 secara perlahan akan menjadi gambar2. teknik ini banyak digunakan di iklan TV misalnya untuk merubah gambar laki-laki menjadi wanita dan sebagainya. 8. Sistem operasi yang didukung oleh DirectX DirectX sebenarnya dirancang untuk berjalan pada sistem operasi windows 95, windows 98 SE, Windows NT 4.0 mulai Service Pack 3, windows ME, windows 2000, dan windows XP, windows CE. Berikut adalah tabel Sistem Operasi yang didukung oleh DirectX. Microsoft Operating Sistem DirectX Support Windows 95 (semua rilis) Seluruh versi DirectX Windows 98 dan Windows 98 SE Seluruh versi DirectX Windows 2000 Professional DirectX 7.0 dst Millennium DirectX 7.0* Windows NT 4.0 (SP 3 dan rilis berikutnya) DirectX 3.0 ditambah DirectPlay Windows CE 2.12 DXPAK Menyediakan fungsi DirectX yang terbatas * Windows ME, 2000, dan XP DirectX telah terintegrasi pada sistem mulai DirectX 8.0. 9. Pengembangan DirectX Pengembangan DirectX yang akan dilakukan oleh Mircosoft antara lain Menyediakan fasilitas API untuk grafik dan audio yang digunakan untuk industri. Menyediakan fungsi yang dapat memanfaatkan kemampuan teknologi dari perangkat keras terbaru. Yang paling penting juga melakukan peningkatan kualitas dari kecepatan, gambar, rendering grafik 3D, dan penggunaan yang lebih mudah. Meningkatkan kemampuan pembuatan game multiplayer melalui internet dengan DirectPlay. Meningkatkan kemampuan dan mempermudah instalasi dan konfigurasi untuk game dan aplikasi lain yang menggunakan teknologi DirectX. Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
6
Sejak memperkenalkan DirectX 1.0 pada tahun1995, Microsoft telah melakukan penambahan kemampuan yang cukup banyak dan sangat bermanfaat untuk para programmer yang tertarik pada dunia grafik, animasi, multimedia dan game. Dengan memanfaatkan DirectX kita dapat membuat program-program tersebut tanpa perlu memikirkan apa dan bagaimana perangkat keras yang akan dipakai dan perkembangannya sehingga dapat berkonsentrasi algoritma program saja. Untuk pengguna, membeli program aplikasi dan game yang dibuat menggunakan teknologi DirectX berarti dapat dengan segera melakukan upgrade ke komputer yang terbaru tanpa perlu membeli program lagi, selain itu juga program akan berjalan lebih cepat dan halus. Keuntungan lainnya adalah DirectX terbaru biasanya disertakan pada CD game yang kita beli, atau kita dapat mendownloadnya secara gratis di situs http://www.microsoft.com/directx. DelphiX DephiX merupakan suatu gabungan dari beberapa komponen freeware Delphi yang berfungsi untuk menyederhanakan pemrograman dari DirectX. DelphiX ditulis oleh Hiroyuki Hori yang ditujukan kepada para programmer Delphi untuk mempermudah mengakses DirectX API yang biasanya harus ditulis dalam bahasa C/C++. DelphiX dapat diinstalasi pada beberapa versi Borland Delphi yaitu versi 3, 4, dan 5. Microsoft DirectX 7 harus telah terinstalasi dalam Sistem Operasi untuk dapat menggunakan DelphiX. 1. Komponen-komponen DelphiX Berikut ini tampilan dari toolbar komponen DelphiX dan fungsinya masing-masing.
Gambar 2. Toolbar Komponen DelphiX. Komponen
Fungsi
TDXDraw
Digunakan untuk mengakses DirectDraw dan menyediakan fungsi-fungsi untuk mengimplementasikan DirectDraw dan Direct3D.
TDXDib
Digunakan untuk meletakkan Device Independent Bitmap ( DIB )
TDXImageList
Digunakan untuk meletakkan sekumpulan DIB dan gambar dari sprite. komponen ini juga berguna untuk mengambil file gambar pada saat runtime.
TDX3D
Komponen ini ditujukan untuk kompatibilitas ke belakang dengan versi DelphiX yang lama. jangan digunakan.
TDXSound
Digunakan untuk mengakses DirectSound dan mempermudah memainkan file *.wav.
TDXWave
Digunakan untuk menyimpan file *.wav.
TDXWaveList
Digunakan untuk menyimpan sekumpulan file *.wav.
TDXInput
Digunakan untuk mengakses DirectInput dan mempermudah penggunaan Keyboard, Joystick dan Mouse.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
7
TDXPlay
Digunakan untuk mengakses DirectPlay dan mempermudah programmer untuk mengirimkan data ke komputer yang lain melalui beberapa cara, diantaranya melalui Internet, modem atau koneksi LAN.
TDXSpriteEngine
Merupakan Sprite engine yang digunakan untuk membuat aplikasi berbasis sprite.
TDXTimer
Merupakan komponen Timer beresolusi tinggi yang menyediakan keakuratanperhitungan waktu lebih baik dari standar TTimer.
TDXPaintBox
Merupakan versi DIB dari TImage.
2. Instalasi DelphiX Untuk menginstalasi DelphiX, download file “DelphiX2000_0717-2.zip” yang dapat dicari pada beberapa situs di internet. Kemudian ekstrak file “DelphiX2000_0717-2.zip” tersebut, pada folder Bin cari dan jalankan file Install_for?.exe. Sesuaikan file yang diinstall dengan versi dari Borland Delphi yang digunakan. 3. Pemrograman DelphiX 3.1. Menampilkan Background Program DirectX yang pertama ini sangat sederhana karena hanya menggunakan dua komponen DelphiX yaitu DXDraw dan DXTimer. Program ini akan menampilkan gambar planet bumi yang dibuat sebagai latar belakang. Sebelumnya pastikan file gambar “bumi.bmp” berada pada direktori yang sama dengan program yang dibuat. Kemudian buat project baru dengan rancangan form seperti dibawah ini. Rancangan Form:
Gambar 3. Rancangan Form program 3.1.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
8
Properti: Komponen Form
DXDraw
DXTimer
Properti Name Widht Height Name Align Display Name Interval
Nilai Form1 640 480 DXDraw1 alClient 640x480x8 DXTimer1 1
Kode program: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXClass, DXDraws; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXTimer1: TDXTimer; procedure DXTimer1Timer(Sender: Integer); private { Private declarations } public { Public declarations } end;
TObject;
LagCount:
var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin if not DXDraw1.CanDraw then exit; DXDraw1.Surface.LoadFromFile ('bumi.bmp'); DXDraw1.Flip; end; end.
Penjelasan program: Pertama kita buka project baru dengan memilih menu FileNew Application. Ubah ukuran Form1 menjadi 640x480. Kemudian pada tab DelphiX pilih komponen DXDraw dan isi properti Align dengan alClient. Hal ini akan membuat DXDraw seukuran dengan ukuran Form1. Pada properti Display isi dengan 640x480x8 yang akan membuat DirectX berjalan pada resolusi 640x480 pixel 8 bit warna.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
9
Tambahkan komponen DXTimer ke Form1. Isi properti Interval dengan 1. Hal ini akan mempercepat jalannya proses animasi karena nilai awal dari DXTimer yaitu 1000 atau sama dengan 1 detik akan terasa sangat lambat bagi animasi yang akan kita buat. Hal terakhir yang kita lakukan adalah menulis kode program untuk melakukan proses pengambaran latar belakang yang akan ditampilkan di layar Form1. Pada komponen DXTimer1 pilih event onTimer. Pada prosedure onTimer yang muncul tuliskan kode berikut. if not DXDraw1.CanDraw then exit;
kode diatas akan melakukan pengecekan apakah layar DXDraw1 dapat dilakukan proses penggambaran. Bila terjadi kesalahan maka program tidak akan dteruskan. DXDraw1.Surface.LoadFromFile ('bumi.bmp');
Lakukan proses file bumi.bmp ke back buffer. back buffer yang dimaksud adalah DXDraw1.Surface. DXDraw1.Flip;
Method Flip merupakan fungsi yang sangat penting dalam proses animasi dalam DelphiX. Fungsi ini akan menampilkan gambar yang berada di back buffer (DXDraw1.Surface) ke layar sehingga animasi akan ditampilkan secara real time dan tidak berkedip karena gambar latar belakang telah digambar sebelumnya di back buffer. Akhirnya program DirectX kita yang pertama telah selesai dibuat. Dengan bantuan komponenkomponen DelphiX, menulis program untuk menampilkan latar belakang di lingkungan DirectX hanya memerlukan beberapa baris program saja. Output:
Gambar 4. Meletakkan gambar latar belakang.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
10
3.2.
Menampilkan Image Program berikut ini merupakan dasar dari animasi yang akan kita bahas pada latihan-latihan selanjutnya. Program ini menggunakan tiga komponen dari DelphiX yaitu DXDraw, DXTimer dan DXImageList. Buat project baru dengan rancangan form seperti di bawah. Pastikan bahwa file gambar “robot.bmp” dan “bumi.bmp” berada pada direktori yang sama dengan program yang akan dibuat. Rancangan Form:
Gambar 5. Rancangan Form program 3.2. Properti: Komponen Form
DXDraw
DXTimer DXImageList
Properti Name Widht Height Name Align Display Name Interval Name DXDraw
Nilai Form1 640 480 DXDraw1 alClient 640x480x8 DXTimer1 1 DXImageList1 DXDraw1
Kode Program: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, DXClass; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXTimer1: TDXTimer; DXImageList1: TDXImageList; procedure DXTimer1Timer(Sender: Integer); private { Private declarations }
TObject;
LagCount:
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
11
public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin if not DXDraw1.CanDraw then exit; //gambar background DXDraw1.Surface.LoadFromFile ('bumi.bmp'); //gambar sprite robot DXImageList1.Items[0].Draw(DXDraw1.Surface,200,200,0); DXDraw1.Flip ; end; end.
Penjelasan Program: Program ini selain menampilkan latar belakang (bumi.bmp), juga akan menampilkan gambar robot (robot.bmp) yang berada ditengah-tengah form. Pada komponen DXImageList1 pilih properti Items kemudian tekan tombol […]. Pada jendela Edit Dialog yang muncul tekan tombol Add New. Kemudian pada item baru yang muncul di jendela Edit Dialog klik Picture […] dan pilih gambar robot.bmp. Set properti Name=Robot dan Transparent = true. properti Name merupakan pengenal dari setiap item yang kita buat. Bila properti transparent bernilai false maka gambar robot akan berbentuk kotak sewaktu ditampilkan di layar. DXDraw1.Surface.LoadFromFile ('bumi.bmp');
Langkah pertama yang kita lakukan adalah meletakkan gambar planet bumi di tengah-tengah form dengan memanggil fungsi LoadFormFile yang kemudian kita anggap sebagai latar belakang. DXImageList1.Items[0].Draw(DXDraw1.Surface,200,200,0);
Kemudian kita tampilkan sprite robot yang berada pada koordinat X=200 dan Y=200. Gambar latar belakang harus diletakkan terlebih dahulu sebelum meletakkan sprite robot, bila terbalik maka gambar sprite robot tidak akan tampak di layar. Hal ini terjadi karena gambar sprite robot akan ditimpa oleh gambar latar belakang. Selain cara diatas, untuk menampilkan sprite kita juga dapat menggunakan cara berikut ini. DXImageList1.Items.Find('robot').Draw(DXDraw1.Surface, 200, 200, 0);
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
12
Dengan memanfaatkan fungsi Find kita dapat langsung memilih gambar yang akan kita tampilkan dengan cara mengisi nilai properti Name (pada program diatas properti Name sudah diisi dengan ‘Robot’). Dengan cara yang kedua ini kita cukup hanya memasukkan nama dari tiap-tiap gambar yang telah dibuat. Hal ini mempermudah kita untuk memilih gambar yang akan ditampilkan terutama untuk program yang menggunakan banyak gambar. Output:
Gambar 6. Menampilkan sprite dengan DXImageList. 3.3.
Input dari Keyboard Pada program berikut ini kita akan mempelajari bagaimana mengendalikan sprite Robot menggunakan tombol keyboard. Pertama buatlah rancangan form seperti pada gambar. Kemudian tambahkan komponen DXInput dari tab DelphiX dan seting propertinya sesuai dengan tabel di bawah. Seting properti DXTimer dan DXImageList sama dengan Latihan 2. Rancangan Form:
Gambar 7. Rancangan Form Program 3.3. Properti: Komponen Form DXInput
Properti Name WindowState Name BindInputStates Enabled
Nilai Form1 SMaximized DXInput1 True True
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
13
Kode Program: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXDraws, DXClass, DXInput; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXTimer1: TDXTimer; DXImageList1: TDXImageList; DXInput1: TDXInput; procedure DXTimer1Timer(Sender: TObject; LagCount: Integer); procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; x1,y1:integer; // posisi sprite implementation {$R *.DFM} procedure TForm1.FormShow(Sender: TObject); begin // set posisi awal sprite x1:=200; y1:=200; end; procedure TForm1.DXTimer1Timer(Sender: Integer); begin if not DXDraw1.CanDraw then exit;
TObject;
LagCount:
DXInput1.Update; //refresh layar DXDraw1.Surface.Fill (0); //cek input keyboard if isLeft in DXInput1.States then x1:=x1-10; if isRight in DXInput1.States then x1:=x1+10; if isUp in DXInput1.States then y1:=y1-10; if isDown in DXInput1.States then y1:=y1+10; //gambar background DXImageList1.Items.Find('Bumi').Draw(DXDraw1.Surface,100,100,0); //gambar sprite DXImageList1.Items.Find('Robot').Draw(DXDraw1.Surface,x1,y1,0); Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
14
DXDraw1.Flip; end; end.
Penjelasan Program: DelphiX telah menyediakan komponen DXInput yang berfungsi untuk menerjemahkan input dari keyboard, joystick dan mouse. Pada program pertama ini dibatasi bahwa input yang dideteksi hanya pada keyboard. Deteksi penekanan tombol keyboard dengan DXInput menjadi sangat sederhana serta mencakup 8 arah pada posisi layar. Berikut penjelasan dari program di atas. procedure TForm1.FormShow(Sender: TObject); begin // set posisi awal sprite x1:=200; y1:=200; end;
Procedure diatas berfungsi untuk meletakkan posisi awal sprite Robot pada koordinat x=200 dan y=200. DXInput1.Update;
Method ini akan melakukan pengecekan terhadap penekanan tombol keyboard, joystick maupun mouse secara real time. Letakkan method ini pertama kali sebelum kita melakukan proses yang lain, bila tidak maka animasi akan berjalan sangat lambat. //refresh layar DXDraw1.Surface.Fill (0);
Refresh layar dengan warna hitam. //cek input keyboard if isLeft in DXInput1.States then x1:=x1-10; if isRight in DXInput1.States then x1:=x1+10; if isUp in DXInput1.States then y1:=y1-10; if isDown in DXInput1.States then y1:=y1+10;
Hal yang paling penting adalah melakukan pengecekan terhadap penekanan tombol keyboard. Pada kode di atas setiap penekanan tombol up, down, left dan right maka posisi sprite akan berubah sebanyak 10 pixel dari posisi awal sprite. //gambar background DXImageList1.Items.Find('Bumi').Draw(DXDraw1.Surface,100,100,0); //gambar sprite DXImageList1.Items.Find('Robot').Draw(DXDraw1.Surface,x1,y1,0);
Proses penampilan gambar latar belakang pada program ini kita menggunakan fungsi sama seperti pada sprite Robot. Hal ini baik untuk dilakukan karena pada program-program animasi yang sebenarnya akan mempergunakan banyak sekali gambar sprite dan latar belakang. Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
15
Variable x1 dan y1 digunakan sebagai posisi sprite Robot yang berubah terhadap penekanan tombol panah keyboard. Output:
Gambar 8. Contoh penggunaan DXInput.
3.4.
Pemrograman Sprite Pada program di bawah ini diterangkan mengenai penggunaan komponen DXSpriteEngine yang digunakan untuk mengontrol pergerakan sprite. Rancangan Form:
Gambar 9. Rancangan Form Program 3.4.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
16
Properti: Komponen Form DXInput
DXDraw
DXTimer DXImageList
Properti Name WindowState Name BindInputStates Enabled Name Align Display Name Interval Name DXDraw Items
Nilai Form1 Smaximized DXInput1 True True DXDraw1 alClient 640x480x8 DXTimer1 1 DXImageList1 DXDraw1 0-Bumi 1-Robot
Kode Program: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXSprite, DXInput, DXDraws, DXClass; type TForm1 = class(TForm) DXDraw1: TDXDraw; DXTimer1: TDXTimer; DXImageList1: TDXImageList; DXInput1: TDXInput; DXSpriteEngine1: TDXSpriteEngine; procedure DXTimer1Timer(Sender: TObject; LagCount: Integer); procedure DXDraw1Finalize(Sender: TObject); procedure DXDraw1Initialize(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} type //class TSprite--------------------------------------------------TSprite = class(TImageSprite) public procedure DoMove(MoveCount: Integer); override; end;
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
17
procedure TSprite.DoMove(MoveCount:integer); begin //cek input if isLeft in Form1.DXInput1.States then x:=x-10; if isRight in Form1.DXInput1.States then x:=x+10; if isUp in Form1.DXInput1.States then y:=y-10; if isDown in Form1.DXInput1.States then y:=y+10; end; //Akhir dari class TSprite---------------------------------------procedure TForm1.DXDraw1Initialize(Sender: TObject); var Robot:TSprite; begin //inisialisasi class Robot Robot:= TSprite.Create(DXSpriteEngine1.Engine); //Isi sprite dengan gambar Robot Robot.Image := DXImageList1.Items.Find('Robot'); //set ukuran sprite Robot.Width := Robot.Image.Width; Robot.Height := Robot.Image.Height; //Set the Position Robot.X := 0; Robot.Y :=0; DXTimer1.Enabled := True; end; procedure TForm1.DXDraw1Finalize(Sender: TObject); begin DXTimer1.Enabled :=false; end; procedure TForm1.DXTimer1Timer(Sender: Integer); begin if not DXDraw1.CanDraw then exit;
TObject;
LagCount:
DXInput1.Update; //refresh layar DXDraw1.Surface.Fill (0); //gambar background DXImageList1.Items.Find('Bumi').Draw(DXDraw1.Surface,100,100,0); //Move the sprites, this method executes the DoMove method of all it's sprites.. DXSpriteEngine1.Move(1); // Draw the sprites onto the back buffer DXSpriteEngine1.Draw(); DXDraw1.Flip; end; end. Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
18
Penjelasan Program: Komponen DXSpriteEngine pada program ini digunakan sebagai tempat objek sprite yang kita buat. //class TSprite--------------------------------------------------TSprite = class(TImageSprite) public procedure DoMove(MoveCount: Integer); override; end; Procedure TSprite.DoMove(MoveCount:integer); begin //cek input if isLeft in Form1.DXInput1.States then x:=x-10; if isRight in Form1.DXInput1.States then x:=x+10; if isUp in Form1.DXInput1.States then y:=y-10; if isDown in Form1.DXInput1.States then y:=y+10; end; //Akhir dari class TSprite----------------------------------------
Metode yang dipakai hanya DoMove yang digunakan untuk menggerakan sprite Robot. Setiap penekanan tombol panah keyboard, sprite akan digerakkan 10 pixel dari posisi semula (tergantung dari tombol panah yang ditekan). procedure TForm1.DXDraw1Initialize(Sender: TObject); var Robot:TSprite; begin //inisialisasi class Robot Robot:= TSprite.Create(DXSpriteEngine1.Engine); //Isi sprite dengan gambar Robot Robot.Image := DXImageList1.Items.Find('Robot'); //set ukuran sprite Robot.Width := Robot.Image.Width; Robot.Height := Robot.Image.Height; //posisi awal sprite Robot.X := 0; Robot.Y :=0; DXTimer1.Enabled := True; end;
Pada prosedur DXDraw1Initialize dilakukan proses inisialisasi sprite Robot, mengisi ukuran sprite dengan dimensi tergantung dari sprite yang kita pakai. Meletakkan sprite di posisi ujung kiri atas layar atau pada koordinat (0,0). Kemudian DXTimer diaktifkan untuk memulai animasi. Proses DXTimer1Timer merupakan proses looping utama dari animasi yang kita buat. Procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer); Begin If not DXDraw1.CanDraw then exit; DXInput1.Update;
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
19
Cek penekanan Tombol Keyboard. //refresh layar DXDraw1.Surface.Fill (0); //gambar background DXImageList1.Items.Find('Bumi').Draw( DXDraw1.Surface,100,100,0);
Letakkan gambar bumi sebagai latar belakang program. //pindahkan posisi sprite //method ini akan mengeksekusi semua method DoMove pada seluruh sprite //yang dibuat DXSpriteEngine1.Move(1);
Metode Move akan memanggil prosedur DoMove yang digunakan untuk proses menggerakkan sprite pada posisi yang baru. //gambar sprite ke back buffer DXSpriteEngine1.Draw();
Metode Draw digunakan untuk melakukan proses penggambaran sprite pada buffer. DXDraw1.Flip; end;
Pada animasi yang modern sprite tidak akan digambar pada layar secara langsung tetapi dilakukan pada layar virtual kemudian setelah selesai baru secara cepat gambar tadi akan di tampilkan pada layar yang sebenarnya dengan metode Flip. procedure TForm1.DXDraw1Finalize(Sender: TObject); begin DXTimer1.Enabled :=false; end;
Terakhir, bila animasi telah selesai non aktifkan kembali DXTimer.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
20
Output:
Gambar 10. Contoh penggunaan DXSpriteEngine. 3.5. Pemrograman Sound Komponen DXWaveList dan DXSound Berikut ini kita akan menggunakan dua komponen dari DelphiX, yaitu DXWaveList dan DXSound. Kedua komponen ini digunakan untuk menghasilkan musik dan suara yang diperlukan oleh aplikasi DirectX yang kita buat. DXWaveList digunakan untuk menyimpan data file suara yang akan dimainkan. DXSound digunakan agar sound yang disimpan DXWaveList dapat dimainkan di form yang kita buat. Sebuah tombol digunakan untuk memainkan file sound untuk memperjelas metode yang dipakai untuk mengambil file sound dari DXWaveList. Rancangan Form:
Gambar 11. Rancangan Form Program 3.5.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
21
Properti: Komponen DXTimer1 DXImageList1
DXWaveList1
Properti Interval Items Items[0] Items[1] Items Items[0].Name Items[0].Wave
Nilai 1 Bumi Robot Guntur Guntur.wav
Kode Program: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, DXSprite, DXInput, DXDraws, DXClass, DXSounds, StdCtrls; type TForm1 = class(Tform) DXDraw1: TDXDraw; DXTimer1: TDXTimer; DXImageList1: TDXImageList; DXInput1: TDXInput; DXSpriteEngine1: TDXSpriteEngine; DXWaveList1: TDXWaveList; DXSound1: TDXSound; Button1: Tbutton; procedure DXTimer1Timer(Sender: Tobject; LagCount: Integer); procedure DXDraw1Finalize(Sender: Tobject); procedure DXDraw1Initialize(Sender: Tobject); procedure Button1Click(Sender: Tobject); private { Private declarations } public { Public declarations } end; var Form1: Tform1; implementation {$R *.DFM} type //class Tsprite--------------------------------------------------Tsprite = class(TimageSprite) public procedure DoMove(MoveCount: Integer); override; end; procedure Tsprite.DoMove(MoveCount:integer); begin //cek input if isLeft in Form1.DXInput1.States then x:=x-10; Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
22
if isRight in Form1.DXInput1.States then x:=x+10; if isUp in Form1.DXInput1.States then y:=y-10; if isDown in Form1.DXInput1.States then y:=y+10; end; //Akhir dari class Tsprite---------------------------------------procedure Tform1.DXDraw1Initialize(Sender: Tobject); var Robot:Tsprite; begin //inisialisasi class Robot Robot:= Tsprite.Create(DXSpriteEngine1.Engine); //Isi sprite dengan gambar Robot Robot.Image := DXImageList1.Items.Find(‘Robot’); //set ukuran sprite Robot.Width := Robot.Image.Width; Robot.Height := Robot.Image.Height; //posisi awal sprite Robot.X := 0; Robot.Y :=0; DXTimer1.Enabled := True; end; procedure Tform1.DXDraw1Finalize(Sender: Tobject); begin DXTimer1.Enabled :=false; end; procedure Tform1.DXTimer1Timer(Sender: Tobject; LagCount: Integer); begin if not DXDraw1.CanDraw then exit; DXInput1.Update; //refresh layar DXDraw1.Surface.Fill (0); //gambar background DXImageList1.Items.Find(‘Bumi’).Draw(DXDraw1.Surface,100,100,0); //pindahkan posisi sprite //method ini akan mengeksekusi semua method DoMove pada seluruh sprite DXSpriteEngine1.Move(1); //gambar sprite ke back buffer DXSpriteEngine1.Draw(); DXDraw1.Flip; end; procedure Tform1.Button1Click(Sender: Tobject); begin DXWaveList1.Items.Find(‘Guntur’).Play(false); end; end.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
23
Penjelasan Program: procedure Tform1.Button1Click(Sender: Tobject); begin DXWaveList1.Items.Find(‘Guntur’).Play(false); end;
Method Play digunakan untuk memainkan file suara (wav) yang pada contoh di atas telah disimpan pada objek DXWaveList1. DXWaveList1 merupakan objek yang digunakan untuk menympan sekumpulan objek TWave. Pada contoh di atas DXWaveList1 hanya menyimpan sebuah objek TWave yaitu “Guntur” yang memegang referensi ke file “guntur.wav” di hard disk. Output:
Gambar 12. Antarmuka program dengan sebuah tombol untuk menghasilkan sound. Penutup Makalah ini hanya membahas cara penggunaan DelphiX dalam membuat aplikasi berbasis DirectX tanpa membahas arsitektur game keseluruhan. Untuk membuat aplikasi game yang sesungguhnya diperlukan pengetahuan yang lebih dalam lagi seperti kecerdasan buatan, tipe dari game yang hendak dikembangkan, platform yang akan digunakan, apakah game tersebut dapat dimainkan secara bersama-sama dalam suatu jaringan komputer, internet dan masih banyak lagi. Tetapi diharapkan dasar-dasar pemrograman DirectX dengan DelphiX ini semakin mempermudah programmer yang ingin menguasai pemrograman selain pemrograman database. Daftar Pustaka Hori, Hiroyuki, 2005. http://www.yks.ne.jp/~hori/, Jepang. Ayres, John. Delphi Graphics And Game Programming Exposed With Directx 7, Wordware Publishing, Inc., Texas. Barron, Todd. Strategy Game Programming With Directx 9.0, Wordware Publishing, Inc., Texas. Barkakati, Nabajyoti. Programming Windows Games with Borland Cpp, Sams Publishing, Indiana. Wiharko, Teguh, 2002. 3DFX, Perangkat Lunak untuk Membangun Ruang Tiga Dimensi dengan Tipe File T3D (Teguh Tiga Dimensi), Tugas Akhir, Bandung. Riwayat Penulis Teguh Wiharko, ST., lahir di Pekalongan, 2 April 1977. Lulus S1 tahun 2002. Dosen PNS dpk Kopertis Wilayah IV Jawa Barat dan Banten pada Program Studi Teknik Informatika, STMIK Buddhi Tangerang dan Dosen Luar Biasa STMIK Sumedang.
Jurnal Infoman’s > Jurnal Ilmu-ilmu Manajemen dan Informatika STMIK Sumedang
24