Sesuai dengan rancangan layout yang telah dibuat sebelumnya, Onil hanya bergerak ke kanan dan ke kiri di bagian bawah screen game. Karena hanya bergerak ke kanan dan ke kiri maka ogut memakai keyboard yaitu tombol kiri dan kanan saja, tidak diperlukan mouse untuk mengontrol gerakan Onil.
Disamping tombol kiri dan kanan ogut juga menggunakan satu tombol lain yaitu shift untuk memperlambat gerakan Onil.
10.1 Tekstur Onil
Pada saat Anda belajar tentang tehnik masking ogut telah memberi contoh program cara menampilkan tokoh Onil ke layar monitor dengan menggunakan sebuah persegipanjang yang diberi tekstur mask dan tekstur image.
Cara pemrograman seperti itu tetap dipergunakan untuk bab ini, tetapi ada sedikit perbedaan. Pada bab ini tokoh Onil yang akan ditampilkan ke layar menggunakan lebih dari satu tekstur agar tercipta animasi yang lebih baik. Ogut menggunakan sembilan tekstur image dan sembilan tekstur mask untuk program ini.
Berikut ini ogut lampirkan cara untuk deklarasi variabel tekstur dan cara load tekstur Onil.
'Texture
Public Text_Onil_I(8) As GLuint
Public Text_Onil_M(8) As GLuint
Public Function Load_All_texture() As Boolean
...
...
...
'Tekstur Jack Onil(Image)
If Not Create_Texture(Text_Onil_I(0), _
"\Texture\Jack_Onil\Onil_0i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(1), _
"\Texture\Jack_Onil\Onil_1i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(2), _
"\Texture\Jack_Onil\Onil_2i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(3), _
"\Texture\Jack_Onil\Onil_3i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(4), _
"\Texture\Jack_Onil\Onil_4i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(5), _
"\Texture\Jack_Onil\Onil_5i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(6), _
"\Texture\Jack_Onil\Onil_6i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(7), _
"\Texture\Jack_Onil\Onil_7i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_I(8), _
"\Texture\Jack_Onil\Onil_8i.bmp") Then
Load_All_texture = False
Exit Function
End If
'Tekstur Jack Onil(Mask)
If Not Create_Texture(Text_Onil_M(0), _
"\Texture\Jack_Onil\Onil_0m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(1), _
"\Texture\Jack_Onil\Onil_1m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(2), _
"\Texture\Jack_Onil\Onil_2m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(3), _
"\Texture\Jack_Onil\Onil_3m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(4), _
"\Texture\Jack_Onil\Onil_4m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(5), _
"\Texture\Jack_Onil\Onil_5m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(6), _
"\Texture\Jack_Onil\Onil_6m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(7), _
"\Texture\Jack_Onil\Onil_7m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_Onil_M(8), _
"\Texture\Jack_Onil\Onil_8m.bmp") Then
Load_All_texture = False
Exit Function
End If
'jika semua berjalan baik return true
Load_All_texture = True
End Function
10.2 Load dan Reload Data Onil
Untuk menyimpan nilai-nilai karakteristik Onil ogut menggunakan type untuk memudahkan pemrograman.
Type Onil_Object
X1 As Integer
Y1 As Integer
X2 As Integer
Y2 As Integer
X3 As Integer
Y3 As Integer
X4 As Integer
Y4 As Integer
dGeserX As Integer
dGeserY As Integer
IB_M As Integer
IK_M As Integer
Index_Texture As Integer
Score As Long
Life As Long
End Type
X1, Y1 sampai dengan X4,Y4 adalah variabel yang dipergunakan untuk menampung posisi Onil di screen game.
dGeserX dan dGeserY digunakan untuk mengubah posisi koordinat Onil, dGeserX untuk mengubah posisi searah dengan sumbu X sedangkan dGeserY untuk mengubah posisi pada sumbu Y.
IB_M digunakan untuk menampung indeks baris matriks Onil.
IK_M berguna untuk menampung indeks kolom matriks Onil.
Index_Texture berhubungan dengan subbab 10.1, variabel ini bernilai 0 sampai dengan 8, berguna sebagai indeks array yang menyimpan tekstur image dan tekstur mask.
Score menampung nilai item logistik yang telah dikumpulkan oleh pemain.
Life digunakan sebagai penampung banyaknya nyawa yang dimiliki oleh pemain, jika Life = 0(nol) maka game over.
Public Sub Load_Onil()
'Timer Onil
'perkecil nilai TDelay agar
'gerakan Onil lebih cepat
Onil_TimerLR.TDelay = 50
Onil_TimerLR.TFirst = True
Jack_Onil.Life = 9
End Sub
Public Sub ReLoad_Onil()
'posisikan Onil di tengah sumbu Y
Jack_Onil.X1 = -75: Jack_Onil.Y1 = -900
Jack_Onil.X2 = 75: Jack_Onil.Y2 = -900
Jack_Onil.X3 = 75: Jack_Onil.Y3 = -600
Jack_Onil.X4 = -75: Jack_Onil.Y4 = -600
'kecepatan geser Onil
Jack_Onil.dGeserX = 50: Jack_Onil.dGeserY = 20
'baris dan kolom matriks
Jack_Onil.IB_M = Baris_M - 1
Jack_Onil.IK_M = Int((Kolom_M - 1) / 2)
TempIB_M = Jack_Onil.IB_M
TempIK_M = Jack_Onil.IK_M
Jack_Onil.Index_Texture = 4
End Sub
Sub-sub di atas ogut buat untuk memberi nilai awal bagi karakteristik Onil. Sub ReLoad_Onil dipakai untuk mengulang pemberian nilai kepada Onil jika Onil gagal menangkap item logistik.
10.3 Tombol Kontrol
Untuk mendeteksi tombol yang ditekan oleh pemain, ogut menggunakan fungsi GetKeyState.
Proses pendeteksian keyboard sangat mudah, Anda tinggal menempatkan sebuah sub di main looping.
Private Sub Keyboard_Ditekan()
'keluar dari program bila Escape ditekan
If (GetKeyState(vbKeyEscape) And &H1000) Then
Selesai = True
End If
'jika tombol Shift ditekan maka kecepatan
'Onil akan berkurang
Delay_Key_Onil = 0
If GetKeyState(vbKeyShift) And &H1000 Then
Delay_Key_Onil = 10
End If
'kiri
If GetKeyState(vbKeyLeft) And &H1000 Then
If Counter_Key_Onil = Delay_Key_Onil Then
Geser_Kiri_Onil
End If
Counter_Key_Onil = Counter_Key_Onil + 1
If Counter_Key_Onil > Delay_Key_Onil Then
Counter_Key_Onil = 0
End If
End If
'kanan
If GetKeyState(vbKeyRight) And &H1000 Then
If Counter_Key_Onil = Delay_Key_Onil Then
Geser_Kanan_Onil
End If
Counter_Key_Onil = Counter_Key_Onil + 1
If Counter_Key_Onil > Delay_Key_Onil Then
Counter_Key_Onil = 0
End If
End If
End Sub
Pada sub di atas terdapat sebuah tombol tambahan yaitu shift, tombol ini berguna untuk memperlambat gerakan Onil agar pemain lebih mudah mengontrol Onil.
Jika shift ditekan maka variabel Delay_Key_Onil diisi dengan nilai tertentu. Variabel ini dipakai untuk kondisi If di tombol kiri dan kanan agar tidak langsung menggerakkan Onil ke kiri dan ke kanan.
Selain tombol shift ogut juga memakai timer untuk menahan laju Onil agar tidak terlalu cepat, jika Anda ingin agar kecepatan Onil bertambah Anda tinggal memperkecil nilai TDelay pada timer Onil.
10.4 Menggerakkan Onil
Untuk menggerakkan Onil ke kiri dan ke kanan yang perlu diperhatikan adalah pergerakan Onil dibatasi oleh matriks sehingga setiap kali Onil berpindah posisi maka nilai IB_M dan IK_M harus selalu diubah sesuai dengan perpindahan yang dilakukan.
Sehingga inti dari proses memindahkan Onil adalah mengubah posisi Onil, mengubah indeks baris serta kolom matriks dan yang terakhir mengubah nilai Index_Texture agar tercipta animasi pada saat Onil ditampilkan di layar monitor.
Public Sub Geser_Kanan_Onil()
'Onil bisa bergerak jika sesuai dengan Timer
'dan tidak berada di luar matriks
If My_Timer(Onil_TimerLR) And _
TempIK_M < (Kolom_M - 1) Then
'geser ke kanan berarti kolom bertambah 1
TempIK_M = TempIK_M + 1
'jika elemen matriks = 1 maka Onil
'bisa bergerak ke tempat tujuan
If Matriks_Onil(TempIB_M, _
TempIK_M) = 1 Then
Jack_Onil.X1 = Jack_Onil.X1 + _
Jack_Onil.dGeserX
Jack_Onil.X2 = Jack_Onil.X2 + _
Jack_Onil.dGeserX
Jack_Onil.X3 = Jack_Onil.X3 + _
Jack_Onil.dGeserX
Jack_Onil.X4 = Jack_Onil.X4 + _
Jack_Onil.dGeserX
'isi dengan kolom matriks yang baru
Jack_Onil.IK_M = TempIK_M
'supaya tekstur Onil berganti-ganti
Jack_Onil.Index_Texture = _
Jack_Onil.Index_Texture + 1
If Jack_Onil.Index_Texture > 8 Then
Jack_Onil.Index_Texture = 0
End If
Else
TempIK_M = Jack_Onil.IK_M
End If
End If
End Sub
Public Sub Geser_Kiri_Onil()
If My_Timer(Onil_TimerLR) And _
TempIK_M > 0 Then
'geser ke kiri berarti kolom berkurang 1
TempIK_M = TempIK_M - 1
If Matriks_Onil(TempIB_M, _
TempIK_M) = 1 Then
Jack_Onil.X1 = Jack_Onil.X1 - _
Jack_Onil.dGeserX
Jack_Onil.X2 = Jack_Onil.X2 - _
Jack_Onil.dGeserX
Jack_Onil.X3 = Jack_Onil.X3 - _
Jack_Onil.dGeserX
Jack_Onil.X4 = Jack_Onil.X4 - _
Jack_Onil.dGeserX
Jack_Onil.IK_M = TempIK_M
'supaya tekstur Onil berganti-ganti
Jack_Onil.Index_Texture = _
Jack_Onil.Index_Texture - 1
If Jack_Onil.Index_Texture < 0 Then
Jack_Onil.Index_Texture = 8
End If
Else
TempIK_M = Jack_Onil.IK_M
End If
End If
End Sub
10.5 Menampilkan Onil
Cara untuk menampilkan Onil ke layar monitor dengan tehnik masking telah ogut bahas, yang terpenting adalah nilai dari Index_Texture dipakai sebagai indeks dari array yang menampung tekstur Onil.
Public Sub Display_Onil()
'Onil yang ditampilkan ke layar jika
'nilai Life lebih dari 0
If Jack_Onil.Life = 0 Then
Exit Sub
End If
'Tampilkan Onil ke layar dengan tehnik masking
glEnable GL_BLEND
glBlendFunc GL_DST_COLOR, GL_ZERO
glBindTexture GL_TEXTURE_2D, _
Text_Onil_M(Jack_Onil.Index_Texture)
glBegin bmPolygon
glTexCoord2f 0#, 0
glVertex2i Jack_Onil.X1, Jack_Onil.Y1
glTexCoord2f 1#, 0
glVertex2i Jack_Onil.X2, Jack_Onil.Y2
glTexCoord2f 1#, 1#
glVertex2i Jack_Onil.X3, Jack_Onil.Y3
glTexCoord2f 0#, 1#
glVertex2i Jack_Onil.X4, Jack_Onil.Y4
glEnd
glBlendFunc GL_ONE, GL_ONE
glBindTexture GL_TEXTURE_2D, _
Text_Onil_I(Jack_Onil.Index_Texture)
glBegin bmPolygon
glTexCoord2f 0#, 0
glVertex2i Jack_Onil.X1, Jack_Onil.Y1
glTexCoord2f 1#, 0
glVertex2i Jack_Onil.X2, Jack_Onil.Y2
glTexCoord2f 1#, 1#
glVertex2i Jack_Onil.X3, Jack_Onil.Y3
glTexCoord2f 0#, 1#
glVertex2i Jack_Onil.X4, Jack_Onil.Y4
glEnd
glDisable GL_BLEND
End Sub
Salam Jack Onil
Heriady
heriady.yoh@gmail.com
Artikel terkait
Membuat Game dengan VB 6
|
Tidak ada komentar:
Posting Komentar