Selamat pagi rekan-rekan, pada pagi ini ogut akan memperkenalkan game side scrolling dan teknik dasar cara membuatnya. Contoh side scrolling game yang menjadi legenda sampai saat ini adalah game Super Mario Bross dan game Sonic the Hedgehog, walaupun game tersebut telah berumur lebih dari dua puluh tahun tetapi namanya masih terdengar hingga detik ini.
Sampai saat ini game bertipe side scrolling masih dibuat dan masih banyak digemari, dengan alasan inilah ogut menulis artikel ini agar rekan-rekan bisa belajar membuat game bertipe side scrolling.
Teori Enam Kondisi
Ada satu ciri yang menjadi keunikan pada game-game yang bertipe side scrolling, tokoh game dapat berpindah-pindah posisi dengan cara melompat ke atas pijakan tertentu.
Contoh Game Darfo (klik disini untuk menuju ke artikelnya)
Untuk dapat membuat game seperti ini dibutuhkan trik khusus pada proses deteksi tabrakan tokoh game dengan poligon-poligon yang menjadi tempat berpijak.
Berikut ini ogut akan memberikan enam kondisi yang dapat digunakan untuk mendeteksi posisi tokoh game agar sang tokoh dapat melompat berpindah-pindah tempat.
Kondisi I
Kondisi ini terjadi pada saat tokoh game berjalan ke kiri dan menabrak poligon yang digunakan sebagai kotak pembatas(KP) di sisi sebelah kanan.
Dua titik koordinat yang digunakan untuk mendeteksi tabrakan adalah titik kiri atas dan titik kiri bawah poligon tokoh.
Kondisi II
Kondisi ini akan terjadi bila tokoh game melompat dan mendarat di atas sebuah kotak pembatas(pijakan).
Titik koordinat yang digunakan untuk mendeteksi kondisi ini adalah titik kiri bawah poligon tokoh dan titik horisontal 2 (h2).
Kondisi III
Kondisi yang terjadi bila tokoh game berada di atas kotak pembatas dan bergerak ke kanan.
Untuk mendeteksi kondisi ini dibutuhkan dua buah vektor bantu.
Kondisi IV
Kondisi ini sama dengan kondisi I tetapi tokoh game menabrak kotak pembatas di sisi sebelah kiri.
Dua titik koordinat yang digunakan untuk mendeteksi tabrakan adalah titik kanan atas dan titik kanan bawah poligon tokoh.
Kondisi V
Kondisi yang sama dengan kondisi II tetapi terjadi di sebelah kiri kotak pembatas.
Untuk mendeteksi kondisi V digunakan titik koordinat kanan bawah poligon tokoh dan titik horisontal 3 (h3).
Kondisi VI
Kondisi ini terjadi bila tokoh game berada di atas kotak pembatas dan bergerak ke kiri.
Sama seperti kondisi III, kondisi VI memerlukan dua buah vektor bantu agar tokoh game bisa terjun ke arah sebelah kiri kotak pembatas.
Implementasi Enam Kondisi
Program implementasi yang ogut sertakan pada artikel ini juga menggunakan skala proyeksi vektor untuk mendeteksi tabrakan.
Setelah program dijalankan Anda dapat menggerakkan tokoh Alien untuk melompat-lompat berpindah posisi dari satu pijakan ke pijakan yang lain.
Berikut ini ogut sertakan kode program yang penting untuk program side scrolling game (Alien), berkreasilah tanpa mengenal batas dan jangan pernah dibatasi oleh waktu dan ruang jika berkarya. Source code lengkap dapat Anda download di link yang telah disediakan.
Tentukan nilai awal untuk Alien dan Kotak Pembatas.
Public Sub SettingNilaiAwal()
'Alien
Alien.Ax = -95 : Alien.Ay = -350
Alien.Bx = 95 : Alien.By = -350
Alien.Cx = 95 : Alien.Cy = -100
Alien.Dx = -95 : Alien.Dy = -100
Alien.GeserX = 9.5
Alien.GeserY = 9.5
'===================
'nilai status alien
'1 = di atas poligon
'3 = lompat
'4 = terjun
'===================
Alien.Status = 4
Alien_Lompat = 0
Alien_Terjun = 0
MaxAlien_Lompat = 22
MaxAlien_Terjun = 90
Terjun_Ketinggian = 45
Red_Alien = False
Indeks_Tekstur_Alien = 0
'Roda kiri
Roda(0).Ax = -70 : Roda(0).Ay = -370
Roda(0).Bx = -30 : Roda(0).By = -370
Roda(0).Cx = -30 : Roda(0).Cy = -330
Roda(0).Dx = -70 : Roda(0).Dy = -330
'Roda tengah
Roda(1).Ax = -20 : Roda(1).Ay = -370
Roda(1).Bx = 20 : Roda(1).By = -370
Roda(1).Cx = 20 : Roda(1).Cy = -330
Roda(1).Dx = -20 : Roda(1).Dy = -330
'Roda kanan
Roda(2).Ax = 30 : Roda(2).Ay = -370
Roda(2).Bx = 70 : Roda(2).By = -370
Roda(2).Cx = 70 : Roda(2).Cy = -330
Roda(2).Dx = 30 : Roda(2).Dy = -330
Total_KP = 6
ReDim KotakPembatas(0 To Total_KP - 1)
'KotakPembatas(0), vertikal kiri
KotakPembatas(0).Ax = -700
KotakPembatas(0).Ay = -400
KotakPembatas(0).Bx = -600
KotakPembatas(0).By = KotakPembatas(0).Ay
KotakPembatas(0).Cx = KotakPembatas(0).Bx
KotakPembatas(0).Cy = 480
KotakPembatas(0).Dx = KotakPembatas(0).Ax
KotakPembatas(0).Dy = KotakPembatas(0).Cy
'KotakPembatas(1), mendatar terbawah
KotakPembatas(1).Ax = -600
KotakPembatas(1).Ay = -480
KotakPembatas(1).Bx = 600
KotakPembatas(1).By = KotakPembatas(1).Ay
KotakPembatas(1).Cx = KotakPembatas(1).Bx
KotakPembatas(1).Cy = -400
KotakPembatas(1).Dx = KotakPembatas(1).Ax
KotakPembatas(1).Dy = KotakPembatas(1).Cy
'KotakPembatas(2), vertikal kanan
KotakPembatas(2).Ax = 600
KotakPembatas(2).Ay = -400
KotakPembatas(2).Bx = 700
KotakPembatas(2).By = KotakPembatas(2).Ay
KotakPembatas(2).Cx = KotakPembatas(2).Bx
KotakPembatas(2).Cy = 480
KotakPembatas(2).Dx = KotakPembatas(2).Ax
KotakPembatas(2).Dy = KotakPembatas(2).Cy
'KotakPembatas(3), pijakan pertama
KotakPembatas(3).Ax = -380
KotakPembatas(3).Ay = -280
KotakPembatas(3).Bx = -180
KotakPembatas(3).By = KotakPembatas(3).Ay
KotakPembatas(3).Cx = KotakPembatas(3).Bx
KotakPembatas(3).Cy = -230
KotakPembatas(3).Dx = KotakPembatas(3).Ax
KotakPembatas(3).Dy = KotakPembatas(3).Cy
'KotakPembatas(4), pijakan kedua
KotakPembatas(4).Ax = -50
KotakPembatas(4).Ay = -160
KotakPembatas(4).Bx = 170
KotakPembatas(4).By = KotakPembatas(4).Ay
KotakPembatas(4).Cx = KotakPembatas(4).Bx
KotakPembatas(4).Cy = -110
KotakPembatas(4).Dx = KotakPembatas(4).Ax
KotakPembatas(4).Dy = KotakPembatas(4).Cy
'KotakPembatas(5), pijakan ketiga
KotakPembatas(5).Ax = 50
KotakPembatas(5).Ay = -10
KotakPembatas(5).Bx = 270
KotakPembatas(5).By = KotakPembatas(5).Ay
KotakPembatas(5).Cx = KotakPembatas(5).Bx
KotakPembatas(5).Cy = 40
KotakPembatas(5).Dx = KotakPembatas(5).Ax
KotakPembatas(5).Dy = KotakPembatas(5).Cy
End Sub
Deteksi tombol keyboard yang ditekan user.
Private Sub Tekan_Keyboard()
NilaiKey = 0
Indeks_Tekstur_Alien = 0
Sudut_Putar_Roda = 0
'kiri
If (GetKeyState(Keys.J) And &H1000) Then
NilaiKey = NilaiKey + 10000
End If
'kanan
If (GetKeyState(Keys.L) And &H1000) Then
NilaiKey = NilaiKey + 20000
End If
'lompat("B" ditekan)
If (GetKeyState(Keys.B) And &H1000) And (Alien.Status = 1) Then
NilaiKey = NilaiKey + 1000
End If
'jika alien sedang melompat atau terjun
If Alien.Status = 3 Then
NilaiKey = NilaiKey + 1000
End If
If Alien.Status = 4 Then
NilaiKey = NilaiKey + 2000
End If
'alien ke kiri saja
If (NilaiKey = 10000) And (Alien.Status = 1) Then
Sudut_Putar_Roda = 9.5
Geser_Alien_KeKiri()
End If
'alien ke kanan saja
If (NilaiKey = 20000) And (Alien.Status = 1) Then
Sudut_Putar_Roda = -9.5
Geser_Alien_KeKanan()
End If
'lompat saja
If NilaiKey = 1000 Then
Alien.Status = 3
Alien_Lompat_KeAtas()
Indeks_Tekstur_Alien = 1
End If
'terjun saja
If NilaiKey = 2000 Then
Alien_Terjun_KeBawah()
End If
'kombinasi kiri+lompat
If (NilaiKey = 11000) And (Alien.Status = 1) Then
Alien.Status = 3
Alien_Lompat_KeAtas()
Geser_Alien_KeKiri()
Indeks_Tekstur_Alien = 1
End If
'sedang lompat+kiri
If (NilaiKey = 11000) And (Alien.Status = 3) Then
Alien_Lompat_KeAtas()
Geser_Alien_KeKiri()
Indeks_Tekstur_Alien = 1
Sudut_Putar_Roda = 29.5
End If
'sedang terjun+kiri
If (NilaiKey = 12000) And (Alien.Status = 4) Then
Alien_Terjun_KeBawah()
Geser_Alien_KeKiri()
Sudut_Putar_Roda = 29.5
End If
'kombinasi kanan+lompat
If (NilaiKey = 21000) And (Alien.Status = 1) Then
Alien.Status = 3
Alien_Lompat_KeAtas()
Geser_Alien_KeKanan()
Indeks_Tekstur_Alien = 1
Sudut_Putar_Roda = -29.5
End If
'sedang lompat+kanan
If (NilaiKey = 21000) And (Alien.Status = 3) Then
Alien_Lompat_KeAtas()
Geser_Alien_KeKanan()
Indeks_Tekstur_Alien = 1
Sudut_Putar_Roda = -29.5
End If
'sedang terjun+kanan
If (NilaiKey = 22000) And (Alien.Status = 4) Then
Alien_Terjun_KeBawah()
Geser_Alien_KeKanan()
Sudut_Putar_Roda = -29.5
End If
End Sub
Gerakkan Alien sesuai dengan tombol yang ditekan user.
'========================================
'copy posisi alien untuk deteksi tabrakan
'========================================
Private Sub Sub_Copy_Alien()
Copy_Alien.Ax = Alien.Ax : Copy_Alien.Ay = Alien.Ay
Copy_Alien.Bx = Alien.Bx : Copy_Alien.By = Alien.By
Copy_Alien.Cx = Alien.Cx : Copy_Alien.Cy = Alien.Cy
Copy_Alien.Dx = Alien.Dx : Copy_Alien.Dy = Alien.Dy
Copy_Alien.Status = Alien.Status
End Sub
Private Sub Geser_Alien_KeKiri()
Dim i As Integer
Dim GeserX_Var As Single
If (Alien.Status = 3 Or Alien.Status = 4) Then
GeserX_Var = Alien.GeserX * 0.65
Else
GeserX_Var = Alien.GeserX
End If
Alien.Ax = Alien.Ax - GeserX_Var
Alien.Bx = Alien.Bx - GeserX_Var
Alien.Cx = Alien.Cx - GeserX_Var
Alien.Dx = Alien.Dx - GeserX_Var
For i = 0 To 2
Roda(i).Ax = Roda(i).Ax - GeserX_Var
Roda(i).Bx = Roda(i).Bx - GeserX_Var
Roda(i).Cx = Roda(i).Cx - GeserX_Var
Roda(i).Dx = Roda(i).Dx - GeserX_Var
Next
End Sub
Private Sub Geser_Alien_KeKanan()
Dim i As Integer
Dim GeserX_Var As Single
If (Alien.Status = 3 Or Alien.Status = 4) Then
GeserX_Var = Alien.GeserX * 0.65
Else
GeserX_Var = Alien.GeserX
End If
Alien.Ax = Alien.Ax + GeserX_Var
Alien.Bx = Alien.Bx + GeserX_Var
Alien.Cx = Alien.Cx + GeserX_Var
Alien.Dx = Alien.Dx + GeserX_Var
For i = 0 To 2
Roda(i).Ax = Roda(i).Ax + GeserX_Var
Roda(i).Bx = Roda(i).Bx + GeserX_Var
Roda(i).Cx = Roda(i).Cx + GeserX_Var
Roda(i).Dx = Roda(i).Dx + GeserX_Var
Next
End Sub
Private Sub Geser_Alien_KeAtas()
Dim i As Integer
Alien.Ay = Alien.Ay + Alien.GeserY
Alien.By = Alien.By + Alien.GeserY
Alien.Cy = Alien.Cy + Alien.GeserY
Alien.Dy = Alien.Dy + Alien.GeserY
For i = 0 To 2
Roda(i).Ay = Roda(i).Ay + Alien.GeserY
Roda(i).By = Roda(i).By + Alien.GeserY
Roda(i).Cy = Roda(i).Cy + Alien.GeserY
Roda(i).Dy = Roda(i).Dy + Alien.GeserY
Next
End Sub
Private Sub Geser_Alien_KeBawah()
Dim i As Integer
Alien.Ay = Alien.Ay - Alien.GeserY
Alien.By = Alien.By - Alien.GeserY
Alien.Cy = Alien.Cy - Alien.GeserY
Alien.Dy = Alien.Dy - Alien.GeserY
For i = 0 To 2
Roda(i).Ay = Roda(i).Ay - Alien.GeserY
Roda(i).By = Roda(i).By - Alien.GeserY
Roda(i).Cy = Roda(i).Cy - Alien.GeserY
Roda(i).Dy = Roda(i).Dy - Alien.GeserY
Next
End Sub
Private Sub Alien_Lompat_KeAtas()
Alien_Lompat = Alien_Lompat + 1
If Alien_Lompat > MaxAlien_Lompat Then
Alien_Lompat = 0
Alien_Terjun = 0
Alien.Status = 4
Else
Geser_Alien_KeAtas()
End If
End Sub
Private Sub Alien_Terjun_KeBawah()
Alien_Terjun = Alien_Terjun + 1
If Alien_Terjun > MaxAlien_Terjun Then
Alien_Lompat = 0
Alien_Terjun = 0
Alien.Status = 1
Else
Geser_Alien_KeBawah()
End If
End Sub
Deteksi tabrakan antara Alien dan Kotak Pembatas.
Private Sub Deteksi_Tabrakan()
Dim i, j As Integer
Dim VektorA_KP As Vektor_Properties
Dim VektorB_KP As Vektor_Properties
Dim Vektor_Alien As Vektor_Properties
Dim SkalaPro_A As Single
Dim SkalaPro_B As Single
Dim Peny_GeserX_Roda As Single
Dim Peny_GeserY_Roda As Single
Dim VektorPendekA As Vektor_Properties
Dim VektorPendekB As Vektor_Properties
For i = 0 To Total_KP - 1
VektorA_KP = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, KotakPembatas(i).Bx, KotakPembatas(i).By)
VektorB_KP = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, KotakPembatas(i).Dx, KotakPembatas(i).Dy)
'titik kiri bawah Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Ax, Copy_Alien.Ay)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kiri bawah Alien ada di dalam KP
'titik kiri atas Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Dx, Copy_Alien.Dy)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kiri atas Alien ada di dalam KP
'=============================
'Alien Tabrak KP di sisi kanan
'Kondisi I
'=============================
'update posisi Alien karena tabrakan
'dengan KotakPembatas(KP)
Alien.Ax = KotakPembatas(i).Bx + 2.5
Alien.Bx = Alien.Ax + 200
Alien.Cx = Alien.Bx
Alien.Dx = Alien.Ax
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserX_Roda = Alien.Ax - Copy_Alien.Ax
For j = 0 To 2
Roda(j).Ax = Roda(j).Ax + Peny_GeserX_Roda
Roda(j).Bx = Roda(j).Bx + Peny_GeserX_Roda
Roda(j).Cx = Roda(j).Cx + Peny_GeserX_Roda
Roda(j).Dx = Roda(j).Dx + Peny_GeserX_Roda
Next
Exit Sub
End If
'titik horisontal 2
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Ax + 30, Copy_Alien.Ay)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 2 di dalam Kotak Pembatas
'=====================================
'Alien Tabrak KP dari sisi atas(kanan)
'Kondisi II
'=====================================
'update posisi Alien karena tabrakan
'dengan KotakPembatas
If (KotakPembatas(i).Cy - Alien.Ay) > Alien.GeserY Then
Alien.Ay = Alien.Ay + 9.5
Else
Alien.Ay = KotakPembatas(i).Cy + 2.5
Sound2.Play()
End If
Alien.By = Alien.Ay
Alien.Cy = Alien.By + 250
Alien.Dy = Alien.Cy
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserY_Roda = Alien.Ay - Copy_Alien.Ay
For j = 0 To 2
Roda(j).Ay = Roda(j).Ay + Peny_GeserY_Roda
Roda(j).By = Roda(j).By + Peny_GeserY_Roda
Roda(j).Cy = Roda(j).Cy + Peny_GeserY_Roda
Roda(j).Dy = Roda(j).Dy + Peny_GeserY_Roda
Next
'terjun terlalu tinggi
If (Alien_Terjun > Terjun_Ketinggian) And (Alien.Status = 4) Then
Sound1.Play()
Red_Alien = True
End If
Alien_Lompat = MaxAlien_Lompat + 1
Alien_Terjun = MaxAlien_Terjun + 1
Exit Sub
End If
End If
'===========
'KONDISI III
'===========
'titik kiri bawah Alien
'(perhatikan cara membuat vektor alien di bawah ini,
'karena berbeda dengan vektor untuk kondisi I dan II)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Dx, KotakPembatas(i).Dy, Copy_Alien.Ax, Copy_Alien.Ay)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kiri bawah Alien ada di atas KP
'titik horisontal 2
'(perhatikan cara membuat vektor alien
'di bawah ini, karena berbeda dengan
'vektor untuk kondisi I dan II)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Cx, KotakPembatas(i).Cy, Copy_Alien.Ax + 30, Copy_Alien.Ay)
'=================================
'dua buah vektor bantu
'(panjang dua vektor harus pendek)
'=================================
VektorPendekA.i = 20.5
VektorPendekA.j = 0
VektorPendekB.i = 0
VektorPendekB.j = 20.5
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekA)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekB)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 2 ada di atas kanan KP
'set Alien untuk terjun ke kanan
Alien.Status = 4
Exit Sub
End If
End If
'titik kanan bawah Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Bx, Copy_Alien.By)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kanan bawah Alien ada di dalam KP
'titik kanan atas Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Cx, Copy_Alien.Cy)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kanan atas Alien ada di dalam KP
'============================
'Alien Tabrak KP di sisi kiri
'Kondisi IV
'============================
'update posisi Alien karena tabrakan
'dengan KotakPembatas
Alien.Bx = KotakPembatas(i).Ax - 2.5
Alien.Ax = Alien.Bx - 200
Alien.Cx = Alien.Bx
Alien.Dx = Alien.Ax
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserX_Roda = Copy_Alien.Bx - Alien.Bx
For j = 0 To 2
Roda(j).Ax = Roda(j).Ax - Peny_GeserX_Roda
Roda(j).Bx = Roda(j).Bx - Peny_GeserX_Roda
Roda(j).Cx = Roda(j).Cx - Peny_GeserX_Roda
Roda(j).Dx = Roda(j).Dx - Peny_GeserX_Roda
Next
Exit Sub
End If
'titik horisontal 3
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Bx - 30, Copy_Alien.By)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 3 di dalam Kotak Pembatas
'====================================
'Alien Tabrak KP dari sisi atas(kiri)
'Kondisi V
'====================================
'update posisi Alien karena tabrakan
'dengan KotakPembatas
If (KotakPembatas(i).Cy - Alien.Ay) > Alien.GeserY Then
Alien.Ay = Alien.Ay + 9.5
Else
Alien.Ay = KotakPembatas(i).Cy + 2.5
Sound2.Play()
End If
Alien.By = Alien.Ay
Alien.Cy = Alien.By + 250
Alien.Dy = Alien.Cy
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserY_Roda = Alien.Ay - Copy_Alien.Ay
For j = 0 To 2
Roda(j).Ay = Roda(j).Ay + Peny_GeserY_Roda
Roda(j).By = Roda(j).By + Peny_GeserY_Roda
Roda(j).Cy = Roda(j).Cy + Peny_GeserY_Roda
Roda(j).Dy = Roda(j).Dy + Peny_GeserY_Roda
Next
'terjun terlalu tinggi
If (Alien_Terjun > Terjun_Ketinggian) And (Alien.Status = 4) Then
Sound1.Play()
Red_Alien = True
End If
Alien_Lompat = MaxAlien_Lompat + 1
Alien_Terjun = MaxAlien_Terjun + 1
Exit Sub
End If
End If
'==========
'KONDISI VI
'==========
'titik kanan bawah Alien
'(perhatikan cara membuat vektor alien di bawah ini,
'karena berbeda dengan vektor untuk kondisi IV dan V)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Dx, KotakPembatas(i).Dy, Copy_Alien.Bx, Copy_Alien.By)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kanan bawah Alien ada di atas KP
'titik horisontal 3
'(perhatikan cara membuat vektor alien
'di bawah ini, karena berbeda dengan
'vektor untuk kondisi IV dan V)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Dx, KotakPembatas(i).Dy, Copy_Alien.Bx - 30, Copy_Alien.By)
'=================================
'dua buah vektor bantu
'(panjang dua vektor harus pendek)
'=================================
VektorPendekA.i = -20.5
VektorPendekA.j = 0
VektorPendekB.i = 0
VektorPendekB.j = 20.5
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekA)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekB)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 3 ada di atas kiri KP
'set Alien untuk terjun ke kiri
Alien.Status = 4
End If
End If
Next
End Sub
Tuntas sudah pembicaraan tentang side scrolling game beserta programnya, teori yang ogut tulis di artikel ini bisa terus dikembangkan lagi, ini hanya contoh sederhana saja dan teori ini juga telah digunakan untuk game Darfo, selamat belajar rekan-rekan.
Update 2 Jan 2016
Ini juga game Jack Onil yang ogut buat, artikel ada 19 bab semuanya sudah ogut posting.
Salam Game Selalu
Heriady
heriady.yoh@gmail.com
Artikel terkait
'Alien
Alien.Ax = -95 : Alien.Ay = -350
Alien.Bx = 95 : Alien.By = -350
Alien.Cx = 95 : Alien.Cy = -100
Alien.Dx = -95 : Alien.Dy = -100
Alien.GeserX = 9.5
Alien.GeserY = 9.5
'===================
'nilai status alien
'1 = di atas poligon
'3 = lompat
'4 = terjun
'===================
Alien.Status = 4
Alien_Lompat = 0
Alien_Terjun = 0
MaxAlien_Lompat = 22
MaxAlien_Terjun = 90
Terjun_Ketinggian = 45
Red_Alien = False
Indeks_Tekstur_Alien = 0
'Roda kiri
Roda(0).Ax = -70 : Roda(0).Ay = -370
Roda(0).Bx = -30 : Roda(0).By = -370
Roda(0).Cx = -30 : Roda(0).Cy = -330
Roda(0).Dx = -70 : Roda(0).Dy = -330
'Roda tengah
Roda(1).Ax = -20 : Roda(1).Ay = -370
Roda(1).Bx = 20 : Roda(1).By = -370
Roda(1).Cx = 20 : Roda(1).Cy = -330
Roda(1).Dx = -20 : Roda(1).Dy = -330
'Roda kanan
Roda(2).Ax = 30 : Roda(2).Ay = -370
Roda(2).Bx = 70 : Roda(2).By = -370
Roda(2).Cx = 70 : Roda(2).Cy = -330
Roda(2).Dx = 30 : Roda(2).Dy = -330
Total_KP = 6
ReDim KotakPembatas(0 To Total_KP - 1)
'KotakPembatas(0), vertikal kiri
KotakPembatas(0).Ax = -700
KotakPembatas(0).Ay = -400
KotakPembatas(0).Bx = -600
KotakPembatas(0).By = KotakPembatas(0).Ay
KotakPembatas(0).Cx = KotakPembatas(0).Bx
KotakPembatas(0).Cy = 480
KotakPembatas(0).Dx = KotakPembatas(0).Ax
KotakPembatas(0).Dy = KotakPembatas(0).Cy
'KotakPembatas(1), mendatar terbawah
KotakPembatas(1).Ax = -600
KotakPembatas(1).Ay = -480
KotakPembatas(1).Bx = 600
KotakPembatas(1).By = KotakPembatas(1).Ay
KotakPembatas(1).Cx = KotakPembatas(1).Bx
KotakPembatas(1).Cy = -400
KotakPembatas(1).Dx = KotakPembatas(1).Ax
KotakPembatas(1).Dy = KotakPembatas(1).Cy
'KotakPembatas(2), vertikal kanan
KotakPembatas(2).Ax = 600
KotakPembatas(2).Ay = -400
KotakPembatas(2).Bx = 700
KotakPembatas(2).By = KotakPembatas(2).Ay
KotakPembatas(2).Cx = KotakPembatas(2).Bx
KotakPembatas(2).Cy = 480
KotakPembatas(2).Dx = KotakPembatas(2).Ax
KotakPembatas(2).Dy = KotakPembatas(2).Cy
'KotakPembatas(3), pijakan pertama
KotakPembatas(3).Ax = -380
KotakPembatas(3).Ay = -280
KotakPembatas(3).Bx = -180
KotakPembatas(3).By = KotakPembatas(3).Ay
KotakPembatas(3).Cx = KotakPembatas(3).Bx
KotakPembatas(3).Cy = -230
KotakPembatas(3).Dx = KotakPembatas(3).Ax
KotakPembatas(3).Dy = KotakPembatas(3).Cy
'KotakPembatas(4), pijakan kedua
KotakPembatas(4).Ax = -50
KotakPembatas(4).Ay = -160
KotakPembatas(4).Bx = 170
KotakPembatas(4).By = KotakPembatas(4).Ay
KotakPembatas(4).Cx = KotakPembatas(4).Bx
KotakPembatas(4).Cy = -110
KotakPembatas(4).Dx = KotakPembatas(4).Ax
KotakPembatas(4).Dy = KotakPembatas(4).Cy
'KotakPembatas(5), pijakan ketiga
KotakPembatas(5).Ax = 50
KotakPembatas(5).Ay = -10
KotakPembatas(5).Bx = 270
KotakPembatas(5).By = KotakPembatas(5).Ay
KotakPembatas(5).Cx = KotakPembatas(5).Bx
KotakPembatas(5).Cy = 40
KotakPembatas(5).Dx = KotakPembatas(5).Ax
KotakPembatas(5).Dy = KotakPembatas(5).Cy
End Sub
Deteksi tombol keyboard yang ditekan user.
Private Sub Tekan_Keyboard()
NilaiKey = 0
Indeks_Tekstur_Alien = 0
Sudut_Putar_Roda = 0
'kiri
If (GetKeyState(Keys.J) And &H1000) Then
NilaiKey = NilaiKey + 10000
End If
'kanan
If (GetKeyState(Keys.L) And &H1000) Then
NilaiKey = NilaiKey + 20000
End If
'lompat("B" ditekan)
If (GetKeyState(Keys.B) And &H1000) And (Alien.Status = 1) Then
NilaiKey = NilaiKey + 1000
End If
'jika alien sedang melompat atau terjun
If Alien.Status = 3 Then
NilaiKey = NilaiKey + 1000
End If
If Alien.Status = 4 Then
NilaiKey = NilaiKey + 2000
End If
'alien ke kiri saja
If (NilaiKey = 10000) And (Alien.Status = 1) Then
Sudut_Putar_Roda = 9.5
Geser_Alien_KeKiri()
End If
'alien ke kanan saja
If (NilaiKey = 20000) And (Alien.Status = 1) Then
Sudut_Putar_Roda = -9.5
Geser_Alien_KeKanan()
End If
'lompat saja
If NilaiKey = 1000 Then
Alien.Status = 3
Alien_Lompat_KeAtas()
Indeks_Tekstur_Alien = 1
End If
'terjun saja
If NilaiKey = 2000 Then
Alien_Terjun_KeBawah()
End If
'kombinasi kiri+lompat
If (NilaiKey = 11000) And (Alien.Status = 1) Then
Alien.Status = 3
Alien_Lompat_KeAtas()
Geser_Alien_KeKiri()
Indeks_Tekstur_Alien = 1
End If
'sedang lompat+kiri
If (NilaiKey = 11000) And (Alien.Status = 3) Then
Alien_Lompat_KeAtas()
Geser_Alien_KeKiri()
Indeks_Tekstur_Alien = 1
Sudut_Putar_Roda = 29.5
End If
'sedang terjun+kiri
If (NilaiKey = 12000) And (Alien.Status = 4) Then
Alien_Terjun_KeBawah()
Geser_Alien_KeKiri()
Sudut_Putar_Roda = 29.5
End If
'kombinasi kanan+lompat
If (NilaiKey = 21000) And (Alien.Status = 1) Then
Alien.Status = 3
Alien_Lompat_KeAtas()
Geser_Alien_KeKanan()
Indeks_Tekstur_Alien = 1
Sudut_Putar_Roda = -29.5
End If
'sedang lompat+kanan
If (NilaiKey = 21000) And (Alien.Status = 3) Then
Alien_Lompat_KeAtas()
Geser_Alien_KeKanan()
Indeks_Tekstur_Alien = 1
Sudut_Putar_Roda = -29.5
End If
'sedang terjun+kanan
If (NilaiKey = 22000) And (Alien.Status = 4) Then
Alien_Terjun_KeBawah()
Geser_Alien_KeKanan()
Sudut_Putar_Roda = -29.5
End If
End Sub
Gerakkan Alien sesuai dengan tombol yang ditekan user.
'========================================
'copy posisi alien untuk deteksi tabrakan
'========================================
Private Sub Sub_Copy_Alien()
Copy_Alien.Ax = Alien.Ax : Copy_Alien.Ay = Alien.Ay
Copy_Alien.Bx = Alien.Bx : Copy_Alien.By = Alien.By
Copy_Alien.Cx = Alien.Cx : Copy_Alien.Cy = Alien.Cy
Copy_Alien.Dx = Alien.Dx : Copy_Alien.Dy = Alien.Dy
Copy_Alien.Status = Alien.Status
End Sub
Private Sub Geser_Alien_KeKiri()
Dim i As Integer
Dim GeserX_Var As Single
If (Alien.Status = 3 Or Alien.Status = 4) Then
GeserX_Var = Alien.GeserX * 0.65
Else
GeserX_Var = Alien.GeserX
End If
Alien.Ax = Alien.Ax - GeserX_Var
Alien.Bx = Alien.Bx - GeserX_Var
Alien.Cx = Alien.Cx - GeserX_Var
Alien.Dx = Alien.Dx - GeserX_Var
For i = 0 To 2
Roda(i).Ax = Roda(i).Ax - GeserX_Var
Roda(i).Bx = Roda(i).Bx - GeserX_Var
Roda(i).Cx = Roda(i).Cx - GeserX_Var
Roda(i).Dx = Roda(i).Dx - GeserX_Var
Next
End Sub
Private Sub Geser_Alien_KeKanan()
Dim i As Integer
Dim GeserX_Var As Single
If (Alien.Status = 3 Or Alien.Status = 4) Then
GeserX_Var = Alien.GeserX * 0.65
Else
GeserX_Var = Alien.GeserX
End If
Alien.Ax = Alien.Ax + GeserX_Var
Alien.Bx = Alien.Bx + GeserX_Var
Alien.Cx = Alien.Cx + GeserX_Var
Alien.Dx = Alien.Dx + GeserX_Var
For i = 0 To 2
Roda(i).Ax = Roda(i).Ax + GeserX_Var
Roda(i).Bx = Roda(i).Bx + GeserX_Var
Roda(i).Cx = Roda(i).Cx + GeserX_Var
Roda(i).Dx = Roda(i).Dx + GeserX_Var
Next
End Sub
Private Sub Geser_Alien_KeAtas()
Dim i As Integer
Alien.Ay = Alien.Ay + Alien.GeserY
Alien.By = Alien.By + Alien.GeserY
Alien.Cy = Alien.Cy + Alien.GeserY
Alien.Dy = Alien.Dy + Alien.GeserY
For i = 0 To 2
Roda(i).Ay = Roda(i).Ay + Alien.GeserY
Roda(i).By = Roda(i).By + Alien.GeserY
Roda(i).Cy = Roda(i).Cy + Alien.GeserY
Roda(i).Dy = Roda(i).Dy + Alien.GeserY
Next
End Sub
Private Sub Geser_Alien_KeBawah()
Dim i As Integer
Alien.Ay = Alien.Ay - Alien.GeserY
Alien.By = Alien.By - Alien.GeserY
Alien.Cy = Alien.Cy - Alien.GeserY
Alien.Dy = Alien.Dy - Alien.GeserY
For i = 0 To 2
Roda(i).Ay = Roda(i).Ay - Alien.GeserY
Roda(i).By = Roda(i).By - Alien.GeserY
Roda(i).Cy = Roda(i).Cy - Alien.GeserY
Roda(i).Dy = Roda(i).Dy - Alien.GeserY
Next
End Sub
Private Sub Alien_Lompat_KeAtas()
Alien_Lompat = Alien_Lompat + 1
If Alien_Lompat > MaxAlien_Lompat Then
Alien_Lompat = 0
Alien_Terjun = 0
Alien.Status = 4
Else
Geser_Alien_KeAtas()
End If
End Sub
Private Sub Alien_Terjun_KeBawah()
Alien_Terjun = Alien_Terjun + 1
If Alien_Terjun > MaxAlien_Terjun Then
Alien_Lompat = 0
Alien_Terjun = 0
Alien.Status = 1
Else
Geser_Alien_KeBawah()
End If
End Sub
Deteksi tabrakan antara Alien dan Kotak Pembatas.
Private Sub Deteksi_Tabrakan()
Dim i, j As Integer
Dim VektorA_KP As Vektor_Properties
Dim VektorB_KP As Vektor_Properties
Dim Vektor_Alien As Vektor_Properties
Dim SkalaPro_A As Single
Dim SkalaPro_B As Single
Dim Peny_GeserX_Roda As Single
Dim Peny_GeserY_Roda As Single
Dim VektorPendekA As Vektor_Properties
Dim VektorPendekB As Vektor_Properties
For i = 0 To Total_KP - 1
VektorA_KP = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, KotakPembatas(i).Bx, KotakPembatas(i).By)
VektorB_KP = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, KotakPembatas(i).Dx, KotakPembatas(i).Dy)
'titik kiri bawah Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Ax, Copy_Alien.Ay)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kiri bawah Alien ada di dalam KP
'titik kiri atas Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Dx, Copy_Alien.Dy)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kiri atas Alien ada di dalam KP
'=============================
'Alien Tabrak KP di sisi kanan
'Kondisi I
'=============================
'update posisi Alien karena tabrakan
'dengan KotakPembatas(KP)
Alien.Ax = KotakPembatas(i).Bx + 2.5
Alien.Bx = Alien.Ax + 200
Alien.Cx = Alien.Bx
Alien.Dx = Alien.Ax
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserX_Roda = Alien.Ax - Copy_Alien.Ax
For j = 0 To 2
Roda(j).Ax = Roda(j).Ax + Peny_GeserX_Roda
Roda(j).Bx = Roda(j).Bx + Peny_GeserX_Roda
Roda(j).Cx = Roda(j).Cx + Peny_GeserX_Roda
Roda(j).Dx = Roda(j).Dx + Peny_GeserX_Roda
Next
Exit Sub
End If
'titik horisontal 2
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Ax + 30, Copy_Alien.Ay)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 2 di dalam Kotak Pembatas
'=====================================
'Alien Tabrak KP dari sisi atas(kanan)
'Kondisi II
'=====================================
'update posisi Alien karena tabrakan
'dengan KotakPembatas
If (KotakPembatas(i).Cy - Alien.Ay) > Alien.GeserY Then
Alien.Ay = Alien.Ay + 9.5
Else
Alien.Ay = KotakPembatas(i).Cy + 2.5
Sound2.Play()
End If
Alien.By = Alien.Ay
Alien.Cy = Alien.By + 250
Alien.Dy = Alien.Cy
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserY_Roda = Alien.Ay - Copy_Alien.Ay
For j = 0 To 2
Roda(j).Ay = Roda(j).Ay + Peny_GeserY_Roda
Roda(j).By = Roda(j).By + Peny_GeserY_Roda
Roda(j).Cy = Roda(j).Cy + Peny_GeserY_Roda
Roda(j).Dy = Roda(j).Dy + Peny_GeserY_Roda
Next
'terjun terlalu tinggi
If (Alien_Terjun > Terjun_Ketinggian) And (Alien.Status = 4) Then
Sound1.Play()
Red_Alien = True
End If
Alien_Lompat = MaxAlien_Lompat + 1
Alien_Terjun = MaxAlien_Terjun + 1
Exit Sub
End If
End If
'===========
'KONDISI III
'===========
'titik kiri bawah Alien
'(perhatikan cara membuat vektor alien di bawah ini,
'karena berbeda dengan vektor untuk kondisi I dan II)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Dx, KotakPembatas(i).Dy, Copy_Alien.Ax, Copy_Alien.Ay)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kiri bawah Alien ada di atas KP
'titik horisontal 2
'(perhatikan cara membuat vektor alien
'di bawah ini, karena berbeda dengan
'vektor untuk kondisi I dan II)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Cx, KotakPembatas(i).Cy, Copy_Alien.Ax + 30, Copy_Alien.Ay)
'=================================
'dua buah vektor bantu
'(panjang dua vektor harus pendek)
'=================================
VektorPendekA.i = 20.5
VektorPendekA.j = 0
VektorPendekB.i = 0
VektorPendekB.j = 20.5
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekA)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekB)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 2 ada di atas kanan KP
'set Alien untuk terjun ke kanan
Alien.Status = 4
Exit Sub
End If
End If
'titik kanan bawah Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Bx, Copy_Alien.By)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kanan bawah Alien ada di dalam KP
'titik kanan atas Alien
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Cx, Copy_Alien.Cy)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kanan atas Alien ada di dalam KP
'============================
'Alien Tabrak KP di sisi kiri
'Kondisi IV
'============================
'update posisi Alien karena tabrakan
'dengan KotakPembatas
Alien.Bx = KotakPembatas(i).Ax - 2.5
Alien.Ax = Alien.Bx - 200
Alien.Cx = Alien.Bx
Alien.Dx = Alien.Ax
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserX_Roda = Copy_Alien.Bx - Alien.Bx
For j = 0 To 2
Roda(j).Ax = Roda(j).Ax - Peny_GeserX_Roda
Roda(j).Bx = Roda(j).Bx - Peny_GeserX_Roda
Roda(j).Cx = Roda(j).Cx - Peny_GeserX_Roda
Roda(j).Dx = Roda(j).Dx - Peny_GeserX_Roda
Next
Exit Sub
End If
'titik horisontal 3
Vektor_Alien = Create_Vektor(KotakPembatas(i).Ax, KotakPembatas(i).Ay, Copy_Alien.Bx - 30, Copy_Alien.By)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 3 di dalam Kotak Pembatas
'====================================
'Alien Tabrak KP dari sisi atas(kiri)
'Kondisi V
'====================================
'update posisi Alien karena tabrakan
'dengan KotakPembatas
If (KotakPembatas(i).Cy - Alien.Ay) > Alien.GeserY Then
Alien.Ay = Alien.Ay + 9.5
Else
Alien.Ay = KotakPembatas(i).Cy + 2.5
Sound2.Play()
End If
Alien.By = Alien.Ay
Alien.Cy = Alien.By + 250
Alien.Dy = Alien.Cy
'update posisi Roda karena tabrakan
'dengan KotakPembatas
Peny_GeserY_Roda = Alien.Ay - Copy_Alien.Ay
For j = 0 To 2
Roda(j).Ay = Roda(j).Ay + Peny_GeserY_Roda
Roda(j).By = Roda(j).By + Peny_GeserY_Roda
Roda(j).Cy = Roda(j).Cy + Peny_GeserY_Roda
Roda(j).Dy = Roda(j).Dy + Peny_GeserY_Roda
Next
'terjun terlalu tinggi
If (Alien_Terjun > Terjun_Ketinggian) And (Alien.Status = 4) Then
Sound1.Play()
Red_Alien = True
End If
Alien_Lompat = MaxAlien_Lompat + 1
Alien_Terjun = MaxAlien_Terjun + 1
Exit Sub
End If
End If
'==========
'KONDISI VI
'==========
'titik kanan bawah Alien
'(perhatikan cara membuat vektor alien di bawah ini,
'karena berbeda dengan vektor untuk kondisi IV dan V)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Dx, KotakPembatas(i).Dy, Copy_Alien.Bx, Copy_Alien.By)
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorA_KP)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorB_KP)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik kanan bawah Alien ada di atas KP
'titik horisontal 3
'(perhatikan cara membuat vektor alien
'di bawah ini, karena berbeda dengan
'vektor untuk kondisi IV dan V)
Vektor_Alien = Create_Vektor(KotakPembatas(i).Dx, KotakPembatas(i).Dy, Copy_Alien.Bx - 30, Copy_Alien.By)
'=================================
'dua buah vektor bantu
'(panjang dua vektor harus pendek)
'=================================
VektorPendekA.i = -20.5
VektorPendekA.j = 0
VektorPendekB.i = 0
VektorPendekB.j = 20.5
SkalaPro_A = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekA)
SkalaPro_B = SkalaProyeksi_Vektor(Vektor_Alien, VektorPendekB)
If Inside_KotakPembatas(SkalaPro_A, SkalaPro_B) Then
'titik horisontal 3 ada di atas kiri KP
'set Alien untuk terjun ke kiri
Alien.Status = 4
End If
End If
Next
End Sub
Tuntas sudah pembicaraan tentang side scrolling game beserta programnya, teori yang ogut tulis di artikel ini bisa terus dikembangkan lagi, ini hanya contoh sederhana saja dan teori ini juga telah digunakan untuk game Darfo, selamat belajar rekan-rekan.
Update 2 Jan 2016
Ini juga game Jack Onil yang ogut buat, artikel ada 19 bab semuanya sudah ogut posting.
Salam Game Selalu
Heriady
heriady.yoh@gmail.com
Artikel terkait
Mendeteksi Posisi dengan Vektor Proyeksi
|
|
Deteksi Tabrakan dengan Proyeksi Vektor
|
|
Deteksi Tabrakan dengan Panjang Vektor / Radius
|
|
Vektor R2
|
Tidak ada komentar:
Posting Komentar