IL adalah bantuan logistik yang dijatuhkan dari udara, dan IL harus ditangkap oleh Onil sebelum menyentuh tanah.
11.1 Tekstur Item Logistik
Ogut menggunakan enam buah tekstur untuk IL agar game terlihat lebih penuh warna. Dan sama seperti tokoh Onil tehnik masking diperlukan untuk menampilkan IL ke screen game, sehingga tekstur image dan tekstur mask dibutuhkan.
Public Function Load_All_texture() As Boolean
...
...
...
'Item Logistik (Image)
If Not Create_Texture(Text_IL_I(0), _
"\Texture\Item_Logistik\bola_i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_I(1), _
"\Texture\Item_Logistik\mug_i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_I(2), _
"\Texture\Item_Logistik\ban_i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_I(3), _
"\Texture\Item_Logistik\kaos_i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_I(4), _
"\Texture\Item_Logistik\box_i.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_I(5), _
"\Texture\Item_Logistik\topi_i.bmp") Then
Load_All_texture = False
Exit Function
End If
'Item Logistik (Mask)
If Not Create_Texture(Text_IL_M(0), _
"\Texture\Item_Logistik\bola_m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_M(1), _
"\Texture\Item_Logistik\mug_m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_M(2), _
"\Texture\Item_Logistik\ban_m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_M(3), _
"\Texture\Item_Logistik\kaos_m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_M(4), _
"\Texture\Item_Logistik\box_m.bmp") Then
Load_All_texture = False
Exit Function
End If
If Not Create_Texture(Text_IL_M(5), _
"\Texture\Item_Logistik\topi_m.bmp") Then
Load_All_texture = False
Exit Function
End If
'jika semua berjalan baik return true
Load_All_texture = True
End Function
11.2 Aktifkan Item Logistik
Item logistik atau IL memerlukan timer agar bisa tampil secara berkala. Untuk mendukung ini ogut memakai timer dan sub Aktifkan_IL agar bisa membuat IL tampil di layar monitor secara sempurna.
Sebelum ogut menerangkan cara menampilkan IL, terlebih dahulu ogut akan menerangkan type yang ogut susun buat IL.
Type Game_Object
ID As Integer
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 Integer
Active_Flag As Integer
Red_Flag As Integer
GO_Timer As Object_Timer
End Type
Type untuk IL hampir sama dengan type yang ogut gunakan untuk Jack Onil, hanya terdapat beberapa perbedaan.
ID ogut siapkan untuk tahap berikutnya, pada bagian lain ogut akan menggunakan variabel ini.
Score pada IL digunakan untuk menambah nilai score ke pemain jika pemain berhasil menangkap IL.
Active_Flag bernilai 1 jika IL sedang aktif, jika tidak maka variabel ini bernilai 0(nol).
Red_Flag, jika isi variabel ini bernilai 1 maka IL akan ditampilkan berwarna merah di screen game.
GO_Timer dipakai sebagai timer kecepatan IL jatuh, semakin kecil nilai TDelay pada timer maka semakin cepat bagi IL untuk turun ke bawah.
Sedangkan variabel yang lain fungsinya sama dengan yang dipakai pada tokoh Onil.
Untuk mengaktifkan IL secara berkala ogut menggunakan timer.
Public Sub Load_GO_Timer()
'timer aktifkan IL
Timer_Isi_IL.TDelay = 500 'dalam milidetik
Timer_Isi_IL.TGetFirst = True
End Sub
Pada sub Render_Objek Timer_Isi_IL di atas ogut tempatkan sebagai berikut.
Private Sub Render_Objek()
Dim i As Integer
glClear clrColorBufferBit Or _
clrDepthBufferBit
glLoadIdentity
Display_BG
'Item Logistik
If My_Timer(Timer_Isi_IL) Then
Aktifkan_IL
End If
For i = 0 To Max_IL - 1
Move_IL i
Display_IL i
Next
Display_Onil
End Sub
Dengan penggunaan If di atas maka setiap selang waktu tertentu IL diaktifkan.
Cara mengaktifkan IL dapat dilakukan dengan menggunakan sub di bawah ini.
Public Sub Aktifkan_IL()
Dim i As Integer
Dim temp_KM As Integer
For i = 0 To Max_IL - 1
If IL(i).Active_Flag = 0 Then
'posisikan IL di tengah sumbu Y
IL(i).X1 = -Int(LebarP_IL / 2)
IL(i).Y1 = 750
IL(i).X2 = Int(LebarP_IL / 2)
IL(i).Y2 = 750
IL(i).X3 = IL(i).X2
IL(i).Y3 = 750 + TinggiP_IL
IL(i).X4 = IL(i).X1
IL(i).Y4 = 750 + TinggiP_IL
'jarak untuk menggeser IL sesuai
'dengan sumbu X atau Y
IL(i).dGeserX = 50
IL(i).dGeserY = 20
'indeks baris matriks diisi dengan
'baris paling atas
IL(i).IB_M = 0
'random indeks kolom matriks
'(isi dengan nilai 0 sampai dengan 69)
IL(i).IK_M = Int((Kolom_M * Rnd) + 0)
''''''''''''''''''''''''''''''''''''''''''
'Update posisi IL sesuai dengan nilai IK_M
''''''''''''''''''''''''''''''''''''''''''
'nilai tengah kolom matriks
temp_KM = Int((Kolom_M - 1) / 2)
If IL(i).IK_M <> temp_KM Then
If temp_KM > IL(i).IK_M Then
'di sebelah kiri sumbu Y
temp_KM = temp_KM - IL(i).IK_M
'geser posisi IL ke kiri
IL(i).X1 = IL(i).X1 - _
(temp_KM * IL(i).dGeserX)
IL(i).X2 = IL(i).X2 - _
(temp_KM * IL(i).dGeserX)
IL(i).X3 = IL(i).X3 - _
(temp_KM * IL(i).dGeserX)
IL(i).X4 = IL(i).X4 - _
(temp_KM * IL(i).dGeserX)
Else
'di sebelah kanan sumbu Y
temp_KM = IL(i).IK_M - temp_KM
'geser posisi IL ke kanan
IL(i).X1 = IL(i).X1 + _
(temp_KM * IL(i).dGeserX)
IL(i).X2 = IL(i).X2 + _
(temp_KM * IL(i).dGeserX)
IL(i).X3 = IL(i).X3 + _
(temp_KM * IL(i).dGeserX)
IL(i).X4 = IL(i).X4 + _
(temp_KM * IL(i).dGeserX)
End If
End If
'isi Index_Texture secara acak
Randomize
IL(i).Index_Texture = Int((Max_IL_V * Rnd) + 0)
'Timer IL untuk jatuh diatur disini
'makin kecil nilai TDelay maka makin
'cepat IL turun ke bawah
IL(i).GO_Timer.TDelay = 50
IL(i).GO_Timer.TGetFirst = True
IL(i).Score = 50
IL(i).Active_Flag = 1
IL(i).Red_Flag = 0
'proses aktifkan IL selesai,
'maka keluar dari looping
Exit For
End If
Next
End Sub
Di dalam sub di atas terdapat sebuah For...Next, dan setiap kali looping diperiksa apakah Active_Flag IL bernilai 0(nol), jika benar maka karakteristik IL diisi dengan nilai-nilai tertentu dan yang terpenting Active_Flag diisi dengan 1 agar bisa tampil di screen game.
11.3 Menggerakkan Item Logistik
Sifat dari IL adalah bergerak turun ke bawah(jatuh bebas), untuk membuat IL bergerak turun caranya mudah yaitu dengan mengurangi koordinat Y(Y1 sampai dengan Y4) IL dengan nilai dGeserY dan menambah indeks baris matriks(IB_M) dengan nilai 1.
Pada saat IL diaktifkan IB_M diisi dengan 0(nol), dan pada saat IL bergerak turun IB_M ditambah 1 agar pergerakan dari IL sesuai dengan matriks Onil yang sebelumnya telah kita buat.
Public Sub Move_IL(i_p As Integer)
'IL yang digerakkan hanya IL yang aktif
If IL(i_p).Active_Flag = 0 Then
Exit Sub
End If
If My_Timer(IL(i_p).GO_Timer) Then
IL(i_p).IB_M = IL(i_p).IB_M + 1
'IL telah melewati baris matriks
'sehingga harus di nonaktifkan
If IL(i_p).IB_M = Baris_M + 10 Then
IL(i_p).Active_Flag = 0
Exit Sub
End If
'geser posisi IL ke bawah
IL(i_p).Y1 = IL(i_p).Y1 - IL(i_p).dGeserY
IL(i_p).Y2 = IL(i_p).Y2 - IL(i_p).dGeserY
IL(i_p).Y3 = IL(i_p).Y3 - IL(i_p).dGeserY
IL(i_p).Y4 = IL(i_p).Y4 - IL(i_p).dGeserY
End If
End Sub
11.4 Menampilkan Item Logistik
Cara menampilkan objek IL sama dengan objek Onil yaitu dengan menggunakan tehnik masking.
Index_Texture diisi secara acak agar IL yang jatuh bervariasi. Jika IL telah melewati jangkauan Onil IL akan berwarna merah, pewarnaan ini untuk memudahkan pemain berinteraksi dengan game. Perubahan IL menjadi merah akan ogut terangkan pada bab berikutnya pada saat ogut membahas proses deteksi tabrakan.
Public Sub Display_IL(i_p As Integer)
'tampilkan hanya IL yang aktif
If IL(i_p).Active_Flag = 0 Then
Exit Sub
End If
'
glEnable GL_BLEND
glBlendFunc GL_DST_COLOR, GL_ZERO
glBindTexture GL_TEXTURE_2D, _
Text_IL_M(IL(i_p).Index_Texture)
glBegin bmPolygon
glTexCoord2f 0#, 0
glVertex2i IL(i_p).X1, IL(i_p).Y1
glTexCoord2f 1#, 0
glVertex2i IL(i_p).X2, IL(i_p).Y2
glTexCoord2f 1#, 1#
glVertex2i IL(i_p).X3, IL(i_p).Y3
glTexCoord2f 0#, 1#
glVertex2i IL(i_p).X4, IL(i_p).Y4
glEnd
'membuat IL berwarna merah
'IL yang berwarna merah tidak bisa
'ditangkap Onil lagi
If IL(i_p).Red_Flag = 1 Then
glColor3f 1#, 0#, 0#
End If
glBlendFunc GL_ONE, GL_ONE
glBindTexture GL_TEXTURE_2D, _
Text_IL_I(IL(i_p).Index_Texture)
glBegin bmPolygon
glTexCoord2f 0#, 0
glVertex2i IL(i_p).X1, IL(i_p).Y1
glTexCoord2f 1#, 0
glVertex2i IL(i_p).X2, IL(i_p).Y2
glTexCoord2f 1#, 1#
glVertex2i IL(i_p).X3, IL(i_p).Y3
glTexCoord2f 0#, 1#
glVertex2i IL(i_p).X4, IL(i_p).Y4
glEnd
glDisable GL_BLEND
'menetralkan warna merah
glColor3f 1#, 1#, 1#
End Sub
Salam Jack Onil
Heriady
heriady.yoh@gmail.com
Artikel terkait
Membuat Game dengan VB 6
|
Tidak ada komentar:
Posting Komentar