Langkah Membuat Game

 Pilihan yang tepat banget 🎨✨

GDevelop itu memang ideal buat proyek seperti ini — kamu bisa bikin doodle fighting PVP tanpa coding sama sekali, hanya dengan sistem event visual logic.

Mari kita buat panduannya step-by-step dari awal sampai bisa jadi .exe 👇



---


🧩 Langkah-langkah Membuat “Doodle Fighting PVP” di GDevelop


🟢 1. Siapkan Bahan


Buat dulu aset sederhana (bisa coretan tangan):


player1.png → karakter kiri


player2.png → karakter kanan


projectile1.png, projectile2.png → bola energi masing-masing pemain


background.png → gambar arena


(opsional) hit_effect.png → efek pukulan



Gunakan gaya doodle sesukamu — hitam putih juga keren.



---


⚙️ 2. Buat Proyek Baru


1. Buka GDevelop → Create a new project.



2. Pilih Empty game.



3. Simpan dengan nama: DoodleFightingPVP.





---


🧱 3. Tambahkan Objek


Masuk ke Scene 1 (scene utama).


Tambahkan objek:


Nama Jenis Keterangan


Player1 Sprite Pilih player1.png, tambahkan animasi idle dan attack (opsional)

Player2 Sprite Pilih player2.png

Projectile1 Sprite Pilih projectile1.png

Projectile2 Sprite Pilih projectile2.png

Background Sprite background.png

HP1Text Text Tulisan “HP1: 100”

HP2Text Text Tulisan “HP2: 100”




---


🎮 4. Tentukan Posisi Awal


Letakkan Background di tengah layar.


Player1 di kiri bawah (misal X=150, Y=400).


Player2 di kanan bawah (misal X=650, Y=400).


Pastikan keduanya menghadap satu sama lain (gunakan flip horizontal kalau perlu).




---


🔧 5. Tambahkan Variabel


Klik kanan pada scene → Scene Variables → tambahkan:


Player1HP = 100

Player2HP = 100



---


⌨️ 6. Buat Event untuk Gerakan


Klik tab Events → tambahkan event berikut:


🕹️ Player 1 (A, D, W, S)


Kondisi Aksi


Key “A” is pressed Add -200 × TimeDelta() to X position of Player1

Key “D” is pressed Add 200 × TimeDelta() to X position of Player1

Key “W” is pressed (Jika jarak ke Player2 < 100) → Subtract 10 from Player2HP

Key “S” is pressed Create object Projectile1 at Player1 position; Add a force of 400 to the right



🕹️ Player 2 (←, →, ↑, ↓)


Kondisi Aksi


Left key is pressed Add -200 × TimeDelta() to X position of Player2

Right key is pressed Add 200 × TimeDelta() to X position of Player2

Up key is pressed (Jika jarak ke Player1 < 100) → Subtract 10 from Player1HP

Down key is pressed Create object Projectile2 at Player2 position; Add a force of -400 to the left




---


💥 7. Deteksi Tabrakan Projektil


Tambahkan event:


Kondisi Aksi


Projectile1 collides with Player2 Subtract 20 from Player2HP; Delete Projectile1

Projectile2 collides with Player1 Subtract 20 from Player1HP; Delete Projectile2




---


❤️ 8. Update HP Text


Tambahkan event tanpa kondisi:


Do = "HP1: " + ToString(Player1HP) to text of HP1Text

Do = "HP2: " + ToString(Player2HP) to text of HP2Text



---


🏁 9. Cek Kemenangan


Tambahkan:


Kondisi Aksi


Player1HP ≤ 0 Display text “Player 2 Wins!”; Pause the game

Player2HP ≤ 0 Display text “Player 1 Wins!”; Pause the game




---


💾 10. Ekspor ke .exe


1. Klik File → Export



2. Pilih Local folder → Windows (.exe)



3. Tunggu proses build, nanti kamu dapat folder berisi file .exe yang siap dimainkan.





---


💡 Tips Tambahan


Kamu bisa menambahkan animasi “attack” sederhana dengan change animation saat tombol pukul ditekan.


Tambahkan sedikit camera shake saat pukulan kena agar terasa “impact”.


Kalau mau karakter lompat, tambahkan variabel y_speed dan logika gravitasi sederhana.




---


Kalau kamu mau, aku bisa bantu buatin:


🔸 Template GDevelop (.json project) siap diimpor ke GDevelop,


atau


🔸 Daftar event visual lengkap (copy-paste format GDevelop) biar kamu tinggal masukkan manual.



Kamu mau saya bantu dengan yang mana?


---


Pertanyaan yang super penting dan sangat tepat 😄


Jadi begini — GDevelop tidak memakai tulisan atau kode sama sekali seperti bahasa pemrograman.

Semua logika (logic) yang aku tulis di atas itu hanya penjelasan untuk manusia supaya kamu paham apa yang akan kamu buat.


Sedangkan di dalam GDevelop, kamu membuat logika itu dengan sistem visual event, yaitu berupa blok-blok seperti ini:



---


🧠 Cara GDevelop “membaca” logika (bukan tulisan, tapi blok)


Contohnya:


🎮 Event: Gerak Kiri (Player1)


Kamu tidak mengetik:


if A is pressed → move player left


Tapi kamu klik-klik saja:


1. Klik tab Events.



2. Klik tombol Add a new event.



3. Di kolom “Condition” klik Add condition → Keyboard → Key pressed → pilih huruf A.



4. Di kolom “Action” klik Add action → Player1 → Add to position (X).



5. Isikan nilai: -200 * TimeDelta()




Hasil visualnya di layar seperti:


Condition: Key A is pressed

Action: Add -200 * TimeDelta() to Player1.X


Semua itu tampil dalam bentuk blok visual, bukan teks kode.



---


⚔️ Event: Serang Dekat


1. Add new event.



2. Condition → Keyboard → Key pressed → pilih W.



3. Tambah kondisi kedua (opsional): Compare two numbers → distance(Player1.X, Player2.X) < 100



4. Action → Variables → Value of a scene variable → pilih Player2HP, lalu “Subtract 10”.





---


🔮 Event: Serangan Spesial (Projektil)


1. Condition → Key “S” is pressed



2. Action 1 → Create object → Projectile1 at position of Player1.



3. Action 2 → Add a permanent force to Projectile1 (misal ke kanan 400).





---


❤️ Event: HP Text


1. Add new event tanpa condition.



2. Action → Modify the text of HP1Text →

isi: "HP1: " + ToString(Player1HP)



3. Lakukan hal yang sama untuk HP2Text.





---


💥 Event: Collision


1. Condition → Collision → Check collision between two objects → pilih Projectile1 dan Player2.



2. Action → Subtract 20 from Player2HP, lalu Delete object Projectile1.





---


Semua langkah itu dilakukan dengan klik dan isi kolom, bukan menulis skrip manual.

Makanya GDevelop sangat ramah buat pemula — kamu tinggal logis saja berpikir "kapan sesuatu terjadi dan apa yang harus dilakukan".



---


Kalau kamu mau, aku bisa kirimkan tangkapan contoh tampilan event-nya (dalam teks simulasi) agar kamu tahu seperti apa bloknya di GDevelop —

atau aku bantu tulis versi “event list siap klik” (step per step tinggal kamu ikuti urutan di GDevelop).


Kamu mau saya bantu buatkan yang mana:

🅰️ contoh tampilan event visual (simulasi blok GDevelop),

atau

🅱️ daftar event klik-step yang bisa langsung kamu praktekkan di aplikasi GDevelop?


---


Pertanyaan ini bagus banget, dan menunjukkan kamu mulai berpikir seperti game designer sejati 😄


Jawabannya:

➡️ Tidak wajib sama, tapi sebaiknya proporsional dan konsisten.

Mari kita bahas dengan cara yang praktis dan gampang diterapkan di GDevelop 👇



---


🎨 1. Ukuran Sprite Player


Tidak harus sama persis, tapi sebaiknya tidak terlalu beda jauh.

Tujuannya supaya jarak serangan, posisi pukul, dan hitbox terasa adil.


✏️ Rekomendasi ukuran umum untuk game fighting 2D sederhana:


Elemen Ukuran disarankan Catatan


Player1 64×64 px – 128×128 px Cukup jelas di layar 800×600 atau 1280×720

Player2 Sama kisaran, boleh beda sedikit (misal 10–20%)

Projectile (bola energi) 16×16 px – 32×32 px Kecil tapi terlihat jelas

Latar/Arena 800×450 px atau 1280×720 px Ukuran layar game keseluruhan



➡️ Intinya:

Kalau Player1 berukuran 80×100 px dan Player2 90×110 px, itu masih normal.

Yang penting, ukuran visual dan jarak jangkauan serang terasa seimbang.



---


⚔️ 2. Kenapa Sebaiknya Konsisten


Animasi & collision jadi lebih mudah.


Hitbox serangan bisa pakai jarak sama (tanpa harus diatur berbeda tiap karakter).


Camera framing tidak perlu diatur ulang untuk tiap karakter.



Kalau salah satu karakter jauh lebih kecil (misal 50×50 vs 120×120),

maka yang kecil sulit dipukul dan tidak adil secara gameplay.



---


🔮 3. Ukuran Projektil


Untuk bola energi, bebas — tapi sebaiknya:


Lebarnya sekitar ¼ sampai ½ lebar karakter. (Kalau player 100 px, bola 25–50 px sudah cukup.)


Gunakan bentuk yang jelas terlihat, misalnya lingkaran putih/bercahaya.


Pastikan punya collision box sedikit lebih kecil dari gambar (agar tidak terasa “curang”).




---


🧱 4. Aturan Praktis yang Aman di GDevelop


Elemen Contoh Aman Catatan


Player sprites 96×96 px Sama tinggi antar karakter

Projectile 24×24 px Bergerak cepat tapi tetap jelas

Ground / Floor Sprite 800×50 px di bawah Untuk batas lantai

Arena BG 800×450 px Latar belakang statis




---


🧩 5. Tips di GDevelop


Kalau ukuran sprite kamu beda, kamu bisa atur scale langsung di editor:

Pilih objek → tab “Properties” → ubah Scale X dan Scale Y (misal jadi 0.8 atau 1.2).


Kalau karakter kamu punya ruang kosong di tepi gambar (canvas terlalu besar),

crop dulu di editor gambar supaya ukuran visualnya sesuai realitas di game.




---


Kalau kamu mau, aku bisa bantu buatkan template ukuran kanvas (dalam pixel) buat:


Player 1 & 2


Projektil


Arena



Jadi kamu tinggal gambar doodle-nya di ukuran yang tepat biar pas di GDevelop.

Apakah kamu mau saya buatkan template ukuran dan posisi dasar itu?


---


Wah 😄🔥 itu ide desain karakter yang keren banget — dan kamu baru saja masuk ke ranah game balancing, salah satu bagian paling menarik di pembuatan game fighting!


Konsepmu ini sudah logis banget:


Karakter besar → HP tinggi, tapi serangan & kecepatan kecil.


Karakter kurus → HP rendah, tapi projektilnya kuat & cepat.



Mari aku bantu rapikan konsepnya supaya fun, seimbang, dan gampang diatur di GDevelop. 👇



---


⚔️ Konsep Gameplay Doodle Fighting Kamu


Karakter Tipe HP Kecepatan Gerak Serangan Dekat Serangan Jarak Jauh


Player 1 (Besar, Tank) Kuat & lambat 150–200 Lambat (150 px/s) Kuat (20 dmg) Tidak punya / kecil

Player 2 (Kurus, Blaster) Cepat & lemah 80–100 Cepat (250 px/s) Lemah (10 dmg) Projektil besar (30 dmg, cepat)




---


⚙️ Cara Terapkan di GDevelop


🎮 1. Atur variabel khusus di setiap player


Pilih Player1 object, klik tab Variables, tambahkan:


Speed = 150

HP = 200

AttackDamage = 20


Lalu di Player2 object, tambahkan:


Speed = 250

HP = 100

AttackDamage = 10

ProjectileDamage = 30


Dengan begitu, setiap karakter punya “DNA” sendiri 😁



---


⚡ 2. Gunakan variabel itu dalam event


Untuk gerak:


When key A pressed → Add -Player1.Variable(Speed) * TimeDelta() to X position


→ jadi karakter besar bergerak lebih lambat.


Untuk serangan:


Subtract Player1.Variable(AttackDamage) from Player2HP


Untuk projektil:


Ketika Projectile2 menabrak Player1:


Subtract Player2.Variable(ProjectileDamage) from Player1HP

Delete Projectile2



---


💥 3. Bikin efek visual pembeda


Player besar: tubuh lebar, warna lebih gelap atau armor.


Player kurus: tubuh ramping, aura/bola energi besar.



Projektil Player2 bisa:


Ukuran 48×48 px


Kecepatan force 600–800


Warna cerah (misal biru atau ungu muda).




---


🎯 4. Tips Balancing


Agar gameplay tetap seru dan tidak berat sebelah:


Aturan Keseimbangan Kenapa


Selisih HP × kecepatan × damage total kira-kira sama Supaya peluang menang relatif seimbang

Projektil besar tapi mudah dihindari (lambat sedikit) Biar tidak OP

Serangan dekat karakter besar knockback-nya lebih jauh Menambah kesan kekuatan fisik



Contoh perhitungan kasar:


Player1 total daya tahan: 200 HP × 1.0 kecepatan × 20 damage = 4000

Player2 total daya tahan: 100 HP × 2.0 kecepatan × 10 (close) / 30 (ranged) ≈ seimbang



---


🧩 5. (Opsional) Tambahkan cooldown serangan


Biar tidak bisa “spam” terus:


Tambahkan variabel canAttack = 1.


Saat serang ditekan, ubah ke 0 dan mulai Timer 0.5 detik.


Setelah 0.5 detik, ubah lagi ke 1.




---


Kalau kamu mau, aku bisa bantu tuliskan event logic GDevelop-nya (dalam bentuk urutan klik) untuk membuat perbedaan kekuatan ini secara penuh —

mulai dari variabel, event serangan, sampai efek HP.


Apakah kamu mau saya lanjutkan dengan panduan klik-step di GDevelop supaya perbedaan karakter besar & kurus itu langsung bisa jalan di proyekmu?


---


Mantap! 💪🔥

Kita lanjut ke panduan klik-step GDevelop biar kamu bisa langsung buat dua karakter dengan perbedaan kekuatan dan HP — tanpa perlu coding, cukup lewat klik dan isi nilai aja.


Panduan ini bisa kamu ikuti di GDevelop versi offline maupun online, sama persis tampilannya.



---


🧩 Langkah-Langkah Membuat Dua Karakter Berbeda di GDevelop



---


🟢 1. Siapkan Objek


Buka proyek kamu → buka Scene utama → pastikan sudah ada:


Nama Jenis Catatan


Player1 Sprite Karakter besar (tank)

Player2 Sprite Karakter kurus (blaster)

Projectile2 Sprite Bola energi Player2

HP1Text & HP2Text Text Menampilkan HP




---


⚙️ 2. Tambahkan Variabel di Tiap Player


Klik Player1 → tab Variables → tambah tiga variabel:


Nama Nilai


Speed 150

HP 200

AttackDamage 20



Klik Player2 → tambah empat variabel:


Nama Nilai


Speed 250

HP 100

AttackDamage 10

ProjectileDamage 30




---


🎮 3. Event untuk Gerakan Player


➤ Player1 (A & D)


1. Add new event



2. Condition → Keyboard → Key pressed → pilih A



3. Action → Player1 → Add to X position → nilai -Player1.Variable(Speed) * TimeDelta()



4. Tambah event baru → Condition: Key D pressed

→ Action: Add to X position Player1.Variable(Speed) * TimeDelta()





---


➤ Player2 (← & →)


1. Condition → Left key pressed

→ Action: Player2 → Add to X position -Player2.Variable(Speed) * TimeDelta()



2. Condition → Right key pressed

→ Action: Player2 → Add to X position Player2.Variable(Speed) * TimeDelta()





---


🥊 4. Event Serangan Dekat


➤ Player1 (W)


1. Condition → Key W pressed

(tambahkan kondisi kedua opsional: Distance between Player1 and Player2 < 100)



2. Action → Subtract Player1.Variable(AttackDamage) from Player2.Variable(HP)





---


➤ Player2 (↑)


1. Condition → Up key pressed

(tambahkan kondisi kedua opsional: Distance between Player2 and Player1 < 100)



2. Action → Subtract Player2.Variable(AttackDamage) from Player1.Variable(HP)





---


🔮 5. Serangan Projektil (Jarak Jauh)


➤ Player2 (↓)


1. Condition → Down key pressed



2. Action 1 → Create object Projectile2 at Player2.X(); Player2.Y()



3. Action 2 → Add permanent force (angle 180°, speed 600) to Projectile2




(Karena Player2 ada di kanan, proyektil diarahkan ke kiri; kalau sebaliknya, ubah jadi angle 0°.)



---


💥 6. Tabrakan Projektil


1. Condition → Collision between Projectile2 and Player1



2. Action →


Subtract Player2.Variable(ProjectileDamage) from Player1.Variable(HP)


Delete object Projectile2






---


❤️ 7. Update Tampilan HP


Tambahkan event tanpa kondisi (selalu jalan):


Aksi


Do = "HP1: " + ToString(Player1.Variable(HP)) to text of HP1Text

Do = "HP2: " + ToString(Player2.Variable(HP)) to text of HP2Text




---


🏁 8. Kondisi Menang


Kondisi Aksi


Player1.Variable(HP) <= 0 Create text “PLAYER 2 WINS!”; Pause the game

Player2.Variable(HP) <= 0 Create text “PLAYER 1 WINS!”; Pause the game




---


💡 Tips Bonus


Supaya tidak “spam attack”, tambahkan cooldown:


Buat variabel canAttack = 1 di tiap player.


Saat menyerang: set canAttack = 0, mulai timer “AttackDelay”.


Event lain: Timer > 0.5 detik → set canAttack = 1.



Tambahkan efek “hit” (misalnya flash putih atau teks “-20”) pakai objek teks kecil sementara.




---


Kalau kamu mau, aku bisa bantu susunkan layout posisi awal di layar (koordinat X/Y yang ideal biar dua player pas saling berhadapan di arena 800×450),

dan event tambahan untuk knockback sederhana (lawan terdorong saat kena pukul).


Kamu mau lanjut ke bagian posisi & knockback itu sekarang?


---


Keren banget kamu udah mikirin UI-nya 💪 — ini langkah penting biar game fighting kamu terasa “utuh” seperti game beneran, bukan cuma percobaan scene.

Kita buat bareng UI-nya yang simpel tapi jelas: menu Start → masuk ke arena game.



---


🎨 Struktur UI Dasar untuk Game Fighting 2D


Kita butuh dua Scene di GDevelop:


Scene Fungsi


MenuScene Halaman utama: tombol “Start Game”, “Exit”

FightScene Arena pertarungan dua player




---


🧩 1️⃣ Buat Scene Menu


📌 Langkah:


1. Di kiri atas GDevelop, klik Project Manager → Scenes → Add a new scene



2. Ganti nama jadi MenuScene



3. Buka MenuScene





---


🎮 2️⃣ Tambahkan Objek UI


Kita pakai Text Object sebagai tombol sederhana (belum butuh grafis rumit):


1. Klik kanan di area “Objects” → Add a new object → Text


Nama: StartText


Tulisan: START GAME


Font size: 48


Warna: putih


Posisi: tengah layar (misal X=300, Y=200)




2. Ulangi lagi buat:


ExitText


Tulisan: EXIT


Font size: 36


Posisi: X=330, Y=300







---


⚙️ 3️⃣ Buat Event untuk Tombol


Klik tab Events → tambahkan logika berikut:



---


🎬 Event: Klik Start Game


Condition:


> Mouse button released

Cursor/touch is on StartText




Action:


> Change scene to "FightScene"





---


🚪 Event: Klik Exit


Condition:


> Mouse button released

Cursor/touch is on ExitText




Action:


> Exit the game




(Gunakan action: “Quit the game” di kategori Game management)



---


🌈 (Opsional) Efek Hover


Biar tombol terasa hidup:


Condition: Cursor/touch is on StartText

Action: Change text color to yellow


Condition: Cursor/touch is not on StartText

Action: Change text color to white


(Sama juga untuk ExitText.)



---


⚡ 4️⃣ Jalankan Game dari Menu


Sekarang buka Project Manager → Game settings → Startup scene,

ubah dari default (biasanya Scene1) ke MenuScene.


Jadi saat kamu klik “Preview”, yang pertama muncul adalah menu utama.



---


🎯 5️⃣ (Opsional) Tambahkan Logo atau Judul


Biar keren:


Tambahkan Text Object dengan tulisan DOODLE FIGHTER di atas tombol Start.


Tambahkan latar belakang warna gelap atau gradient (bisa pakai Sprite object).




---


💡 Tips Tambahan


Kalau nanti kamu mau versi controller, tombol bisa diganti dengan key (misal Enter = Start).


Untuk transisi lebih halus: tambahkan efek fade in/out pakai layer hitam semi transparan.


Kalau ingin pakai sprite tombol (bukan teks), tinggal buat Sprite → event-nya sama, hanya ganti “Cursor on object StartSprite”.




---


Kalau kamu mau, aku bisa bantu buat template scene Menu lengkap (layout + event) dalam bentuk daftar klik-klik langkah di GDevelop — biar kamu tinggal ikuti seperti resep.

Apakah kamu mau versi teks step-by-step praktis itu, atau mau versi visual diagram logika event-nya (yang mirip flowchart)?


---


Keren banget — kamu sudah sampai ke tahap flow game lengkap! 🔁🔥

Jadi alurnya seperti ini:

➡️ Menu Scene → Fight Scene → (Player menang) → Result Scene → kembali ke Menu Scene


Mari kita buat langkah-langkahnya satu per satu, biar bisa langsung kamu klik di GDevelop tanpa coding.



---


🧭 ALUR SINGKAT


1️⃣ MenuScene → Tombol “Start” → buka FightScene

2️⃣ FightScene → Jika HP salah satu = 0 → buka ResultScene

3️⃣ ResultScene → Tombol “Main Lagi” → kembali ke MenuScene



---


⚙️ 1. Buat Scene Baru untuk Hasil Pertarungan


Klik Project Manager → Scenes → Add a new scene


Nama: ResultScene


Buka Scene tersebut.



Tambahkan 2 objek Text:


Nama Isi Posisi Keterangan


WinnerText “PLAYER 1 WINS!” X=250, Y=180 Teks hasil (nanti bisa diganti otomatis)

BackText “BACK TO MENU” X=270, Y=280 Tombol kembali ke menu




---


🧩 2. Simpan Siapa yang Menang (di FightScene)


Kamu perlu Global Variable agar hasil menang bisa dibawa antar-scene.


➤ Langkah:


1. Di kiri → klik Project Manager → Game Variables (ikon bumi)



2. Tambah variabel baru:


Nama: WinnerName


Tipe: String (kosong)





➤ Tambahkan event di FightScene:


Event 1:

Condition → Player1.Variable(HP) <= 0

Action →


Set GlobalVariable WinnerName = "PLAYER 2"


Change scene to "ResultScene"



Event 2:

Condition → Player2.Variable(HP) <= 0

Action →


Set GlobalVariable WinnerName = "PLAYER 1"


Change scene to "ResultScene"




---


🖼️ 3. Tampilkan Pemenang di ResultScene


Masuk ke ResultScene → Events

Tambahkan event tanpa kondisi:


Action:


> Do = GlobalVariableString(WinnerName) + " WINS!" to text of WinnerText





---


🖱️ 4. Tombol “Back to Menu”


Tambahkan event:


Condition:


> Mouse button released

Cursor/touch is on BackText




Action:


> Change scene to "MenuScene"





---


🌀 5. (Opsional) Tombol “Main Lagi”


Kalau kamu mau langsung ulang pertarungan tanpa ke menu:


Tambahkan PlayAgainText (isi: “PLAY AGAIN”) di ResultScene.

Event-nya:


Condition:


> Mouse button released

Cursor/touch is on PlayAgainText




Action:


> Change scene to "FightScene"





---


💡 Tambahan Estetika


Tambahkan fade-in/out effect:

Buat layer hitam semi transparan, ubah opacity saat scene berubah.


Atau tambahkan animasi teks “WINS!” dengan scale tween biar terasa berenergi.




---


Kalau kamu mau, aku bisa bantu tuliskan template urutan event lengkap (Menu → Fight → Result) dalam format yang bisa langsung kamu tiru klik per klik di GDevelop — seperti resep siap pakai.

Kamu mau versi itu?


---


Nah, pertanyaan ini penting banget 💡 — dan bagus kamu tanyakan sekarang, karena ini titik di mana game kamu bisa naik kelas dari “doodle” ke “game yang terasa hidup” tanpa harus rumit.


Jawaban singkatnya:

👉 Tidak, karakter tidak harus cuma satu gambar.

Kamu bisa (dan sebaiknya) memberi beberapa frame animasi di GDevelop supaya gerakan seperti jalan, pukul, diam, kena serang tampak hidup.



---


🎨 Konsep Dasar: Sprite dengan Animasi di GDevelop


Setiap karakter (Player1, Player2) adalah 1 objek Sprite,

tapi di dalamnya kamu bisa punya banyak animasi,

dan di setiap animasi ada beberapa frame gambar.



---


📁 Contoh Struktur Player


Animasi Deskripsi File yang dibutuhkan


Idle Diam di tempat idle_1.png, idle_2.png, ...

Walk Jalan maju/mundur walk_1.png, walk_2.png, walk_3.png

Punch Serangan dekat punch_1.png, punch_2.png, punch_3.png

Hit Saat kena pukul hit_1.png, hit_2.png

Dead Saat kalah dead_1.png, dead_2.png




---


⚙️ Cara Menambah Animasi di GDevelop


1️⃣ Klik objek Player1 di panel kiri → Edit object

2️⃣ Di tab “Animations”, kamu bisa tambahkan baris baru dengan tombol (+) Add animation

3️⃣ Beri nama sesuai (misal “Idle”, “Walk”, dll)

4️⃣ Klik “Add sprite(s)” dan masukkan frame-frame gambarnya

5️⃣ Centang “Loop” untuk animasi yang berulang (seperti Idle atau Walk)



---


🧠 Cara Mengontrol Animasi (pakai Event)


Kamu tinggal atur logika di Event Sheet. Contoh untuk Player1:



---


🟢 Diam


Condition: Key A not pressed AND Key D not pressed

Action: Change the animation of Player1 to "Idle"



---


🟡 Jalan


Condition: Key A pressed OR Key D pressed

Action: Change the animation of Player1 to "Walk"



---


🔴 Serangan


Condition: Key W pressed

Action: Change the animation of Player1 to "Punch"



---


⚫ Saat kena serang


Condition: Player1 collides with Projectile2

Action: Change animation to "Hit"


(set timer kecil biar balik ke Idle setelah 0.3 detik)



---


☠️ Saat kalah


Condition: Player1.Variable(HP) <= 0

Action: Change animation to "Dead"



---


🧩 Catatan Penting


Semua gambar di satu animasi harus punya ukuran sama (misal 64×64 px).


Kalau Player1 dan Player2 punya ukuran beda, tidak masalah — asalkan tiap animasi dalam satu karakter konsisten ukurannya.


Kamu bisa balik arah karakter yang menghadap kiri-kanan dengan Action:

Flip the object horizontally = Yes




---


💡 Tips untuk Gaya Doodle Sederhana


Kamu gak perlu animasi halus. Cukup:


2 frame untuk idle (karakter sedikit goyang atau berkedip)


3 frame untuk punch


1 frame untuk hit

Sudah cukup bikin hidup.




---


Kalau kamu mau, aku bisa bantu bikin template tabel animasi untuk Player1 dan Player2, lengkap dengan urutan frame, nama file, dan logika transisi antar animasi (klik-step GDevelop-nya).


Kamu mau saya bantu susunkan yang itu biar kamu tinggal ikuti?


---


🎯 Wah, kamu nangkep logikanya dengan tajam banget — dan pertanyaanmu ini justru inti dari “kenapa banyak game fighting 2D terasa hidup”.


Jawabannya:

➡️ Bisa banget!

Kamu boleh dan sebaiknya juga membuat pukulan jarak dekat (melee attack) yang punya deteksi tabrakan seperti projektil.

Cuma, karena pukulan itu bagian dari tubuh karakter, bukan objek terpisah seperti peluru, maka pendekatannya sedikit beda.



---


💡 Kenapa Projektil Lebih Mudah Dideteksi Collide


Projektil (misalnya bola energi) dibuat sebagai objek terpisah, jadi GDevelop bisa mendeteksi tabrakan dengan mudah:


> Collision between Projectile2 and Player1




Tapi kalau serangan dekat berasal dari animasi atau tangan Player1, GDevelop nggak tahu bagian mana yang dianggap "pukulan", karena seluruh tubuh Player1 dihitung satu kotak besar (bounding box).

Makanya pukulannya sering tidak terdeteksi secara tepat kalau cuma pakai:


> Collision between Player1 and Player2





---


🧩 Solusi: “Hitbox” atau “AttackZone” Sederhana


Kita bikin objek kecil tak terlihat yang muncul sesaat ketika Player menyerang.

Objek ini akan jadi detector pukulan.



---


⚙️ Langkah-langkahnya


🟢 1. Buat objek baru


Nama: Player1Hitbox


Jenis: Sprite (1×1 px transparan atau kecil saja, bisa warna merah waktu debug)


Centang “Destroy outside of screen”




---


🟢 2. Saat Player1 menekan tombol serang (misal W)


Tambahkan event:


Condition: Key W pressed

Action 1: Create object Player1Hitbox at Player1.X() + 40; Player1.Y() + 0

Action 2: Add permanent force angle 0°, speed 0

Action 3: Set timer "Punch1" to 0


(posisi X +40 biar muncul di depan tubuhnya, sesuaikan arah)



---


🟡 3. Deteksi Tabrakan


Condition: Player1Hitbox collides with Player2

Action 1: Subtract Player1.Variable(AttackDamage) from Player2.Variable(HP)

Action 2: Change animation of Player2 to "Hit"

Action 3: Delete object Player1Hitbox



---


🔴 4. Hapus Hitbox Setelah 0.3 Detik (biar nggak nabrak terus)


Condition: Timer "Punch1" > 0.3

Action: Delete object Player1Hitbox



---


⚫ 5. Balik arah pukulan


Kalau Player1 bisa menghadap kiri atau kanan, buat dua posisi spawn:


Kalau menghadap kanan → Player1.X() + 40


Kalau menghadap kiri → Player1.X() - 40



Gunakan kondisi tambahan:


Condition: Player1 is flipped horizontally

Action: Create Player1Hitbox at Player1.X() - 40; Player1.Y()



---


✨ Hasilnya


Saat kamu tekan tombol pukul, muncul hitbox kecil di depan karakter.


Kalau menyentuh lawan → lawan kena damage dan animasi “Hit” aktif.


Setelah 0.3 detik → hitbox otomatis hilang.



Dengan ini, logika serangan dekat jadi seefektif peluru, tapi tetap realistis karena hanya aktif sebentar.



---


Kalau kamu mau, aku bisa bantu tuliskan versi klik per klik GDevelop-nya (tanpa penulisan manual) untuk membuat hitbox pukulan ini lengkap dengan arah kanan-kiri dan efek knockback sederhana.

Kamu mau saya lanjutkan ke situ?


---


Pertanyaanmu sangat tajam lagi 🔥 — dan memang, bagian “flip karakter” ini adalah titik yang sering bikin bingung banyak pembuat game pemula di GDevelop.

Mari aku jelaskan secara terstruktur dan simpel supaya kamu paham betul: kapan perlu flip, apa efeknya, dan bagaimana supaya logika lain (gerak, hitbox, projektil, dsb) tetap aman ✅



---


🧠 1️⃣ Apa Itu “Flip” di GDevelop


“Flip horizontally” artinya:


> GDevelop membalik gambar karakter ke arah berlawanan di layar,

tanpa mengubah koordinat posisi X sama sekali.




Jadi:


Kalau semula menghadap kanan, lalu kamu flip → ia tampak menghadap kiri.


Tapi posisi koordinat X tetap sama (tidak berpindah tempat).



Artinya:

👉 Secara logika game, Player1 tetap di X = 300,

tapi secara visual dia berubah arah.



---


🎮 2️⃣ Kapan Kamu Perlu Flip


Kamu perlu “flip” saat pemain menekan arah berlawanan.


Contoh untuk Player1 (kontrol A/D):


Condition: Key D pressed

Action:

  - Add to Player1.X position = +Speed * TimeDelta()

  - Flip Player1 horizontally = No  (menghadap kanan)


Condition: Key A pressed

Action:

  - Add to Player1.X position = -Speed * TimeDelta()

  - Flip Player1 horizontally = Yes (menghadap kiri)


Itu saja sudah cukup untuk membuat karakter menoleh ke arah gerakan.



---


⚙️ 3️⃣ Apakah Flip Mempengaruhi Logika Lain?


Jawaban:

➡️ Tidak langsung, tapi bisa memengaruhi posisi spawn objek baru

(seperti hitbox, projektil, atau efek serangan*).


Kenapa?

Karena ketika kamu membuat objek baru (misal peluru atau hitbox), kamu biasanya meletakkannya di:


Player1.X() + 40


Artinya di depan karakter kalau ia menghadap kanan.


Tapi kalau karakter lagi flip (menghadap kiri),

“depan”-nya justru di arah -40, bukan +40.



---


🔄 4️⃣ Jadi Solusinya: Kondisi Arah saat Spawn


Kamu hanya perlu tambahkan kondisi arah saat membuat objek.


Contoh untuk hitbox atau projektil:


Condition: Key W pressed

Sub-condition: Player1 is flipped horizontally = No

Action: Create object Player1Hitbox at Player1.X() + 40; Player1.Y()


Condition: Key W pressed

Sub-condition: Player1 is flipped horizontally = Yes

Action: Create object Player1Hitbox at Player1.X() - 40; Player1.Y()


Dengan begitu:


Kalau Player1 menghadap kanan → hitbox muncul di kanan.


Kalau Player1 menghadap kiri → hitbox muncul di kiri.




---


🧩 5️⃣ Efek ke Projektil


Logikanya sama.


If Player2 is flipped horizontally = No → arah peluru ke kanan (angle 0°)

If Player2 is flipped horizontally = Yes → arah peluru ke kiri (angle 180°)



---


⚖️ Kesimpulan


Komponen Terpengaruh Flip? Solusi


Gerak (A/D) Tidak Hanya ubah arah flip-nya

Animasi Tidak Bisa pakai animasi sama

Hitbox serangan Ya Buat dua posisi (kanan & kiri)

Projektil Ya Atur arah & posisi sesuai flip

HP/damage Tidak Tidak terpengaruh sama sekali




---


Dengan kata lain:

👉 Flip itu cuma visual, bukan logika posisi,

tapi kamu perlu menyesuaikan posisi objek yang muncul di depan karakter agar tetap sesuai arah menghadapnya.



---


Kalau kamu mau, aku bisa bantu tuliskan template event GDevelop lengkap untuk satu karakter yang sudah:


Bisa jalan kiri–kanan,


Otomatis flip arah,


Punya serangan dekat dengan hitbox dinamis kanan/kiri,


Dan animasi berpindah dengan benar.



Kamu mau saya buatkan versi itu (format klik-klik event GDevelop, bukan teks kode)?


---