Membuat dinding di game berbasis ubin: apa yang saya lewatkan?

25

Setelah menghabiskan waktu hari ini untuk menuliskan beberapa catatan mengenai penerapan dinding ke dalam permainan berbasis ubin saya, tiba-tiba saya menyadari itu tidak akan sesederhana yang saya bayangkan sebelumnya. Sementara tahap pekerjaan saya saat ini bahkan tidak dekat dengan benar-benar membuat kode yang berhubungan dengan dinding, saya telah datang dengan tiga cara berbeda untuk melakukannya. Saat ini saya tidak yakin ide mana yang paling berhasil, dan apakah saya melewatkan sesuatu atau tidak.

Penting: karakter BISA berdiri di atas ubin yang memiliki dinding, terlepas dari bentuknya.

Hal umum untuk ketiga varian: tilemap akan "disimpan" dalam wadah berbasis std :: vector (atau serupa) berdimensi tunggal. Alasan untuk itu (luar biasa) dijelaskan dalam jawaban untuk pertanyaan yang berbeda.

Kelas penampung dalam game berbasis ubin.

Kembali ke tembok.

A) Pendekatan sederhana.

Tidak ada yang mewah di sini. Setiap ubin-wadah tidak hanya dapat menampung karakter, tetapi satu atau beberapa objek Dinding, yang melekat pada tepi di dalam ubin.

Pendekatan pertama

Kelebihan: mudah diimplementasikan, tidak ada perubahan di mesin. Cons: Dua hal. Satu - mungkin hanya di kepala saya, tetapi beberapa kombinasi hanya terlihat jelek. Kedua - pendekatan ini memungkinkan untuk membuat dinding ganda dari dua ubin yang berdekatan. Bangunan akan menjadi bagian penting dari gim ini, dan dinding ganda memungkinkan para pembangun untuk tidak lagi meningkatkan materi dinding melalui sarana gim, dan hanya mencapai peningkatan daya tahan dengan menggandakan dinding yang ada. Itu tidak diinginkan. Tentu, saya bisa memasukkan prosedur yang melarang tembok ganda, tetapi akan terasa buruk.

B) Pendekatan cerdas (?).

Alih-alih membiarkan para pemain mendobel dinding seluruh peta, saya akan mengalahkan mereka. Setiap dinding memiliki dua bagian yang melekat pada tepi ubin dari dalam. Jadi, untuk membuat satu "unit Wall" saya harus membuat dua objek Half-Wall di dua ubin yang berdekatan.

Pendekatan kedua

Pro: Ini simetris !!! Juga, tidak ada perubahan signifikan dari spesifikasi mesin saat ini yang diperlukan. Cons: Lebih banyak kerumitan, lebih banyak objek, dan, tentu saja, "topi". Seperti yang Anda lihat pada gambar, pada dasarnya sudut akan menangisi objek "topi". Saya sebenarnya asyik dengan itu, tidak begitu sulit untuk ditambahkan. Hei, saya sudah punya rencana untuk kolom tipis yang terbuat dari empat topi yang terhubung. Manis. Namun, saya masih khawatir tentang kemungkinan masalah Bidang Pandang dan Lini Penglihatan.

C) Varian total perbaikan.

Atau, saya bisa membuat batas dan sudut sebagai wadah terpisah untuk objek game. Seperti itu.

Pendekatan ketiga

Pro: Bahkan tidak yakin. Yah, itu mudah. Pastinya. Cons: Ini akan membutuhkan perombakan. Syukurlah, bukan kode, tetapi mentalitas mekanik permainan saat ini - itu sudah pasti. Manfaatnya tidak begitu jelas. Juga, pendekatan ini membutuhkan lebih banyak wadah daripada dua yang sebelumnya. Matematika pengindeksan juga akan sedikit sakit.

Jadi di sini kita memilikinya - tiga cara berbeda membuat dinding antara ubin. Jika ada alternatif di luar sana - saya akan senang untuk memeriksanya. Jika ada manfaat / kelemahan dari salah satu pendekatan yang tidak saya lihat - tunjukkan.

norien
sumber
2
A.2: Sebagai A, hanya bahwa hanya dua sisi - misalnya, Utara dan Barat - yang dapat memiliki tembok. Itulah pendekatan yang digunakan X-Com.
Martin Sojka
@ Martin Sojka Itu meninggalkan lubang di sudut tenggara. Namun, mungkin berguna untuk mempertimbangkan model C dengan cara ini, setiap ubin dapat memiliki kombinasi tiga elemen dinding yang berbeda, bukan sudut barat dan barat laut.
aaaaaaaaaaaa
Jadi dindingnya terlihat, saya ambil? Bukan hanya memblokir tepi ubin. Mengapa Anda perlu dua bagian di opsi B? Mengapa tidak hanya satu dinding, setengah diimbangi ke ubin lain?
Richard Marskell - Drackir
@ eBusiness, jika Anda hanya mengizinkan dinding di utara dan barat, Anda dapat mensimulasikan dinding di selatan dan timur dengan hanya menempatkan dinding di utara dan barat ubin di bawahnya.
Tetrad
Saya sarankan pergi dengan C. Ini yang saya lakukan di jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png ini dan bekerja dengan cukup baik. Satu-satunya masalah adalah tepi paling selatan / timur dari peta. Anda harus melakukan sesuatu tentang itu.
Blecki

Jawaban:

14

Saya akan menggunakan metode Anda 'B'.

Untuk menghindari kebutuhan 'penutup', cukup rentangkan setiap dinding "1/2 ketebalan dinding" di kedua arah. Ini akan menciptakan dinding yang tumpang tindih tempat mereka bertemu, tetapi diagram Anda sudah menunjukkan ini bukan masalah.

Jadi, dalam Metode 'B', Pic # 3, dinding horizontal akan memanjang ke kiri sedikit, dan dinding vertikal akan memanjang sedikit.

[Saya baru di sini, baru saja mendaftar. Apakah saya kehilangan sesuatu, karena saya tidak dapat melihat tombol 'Tambahkan Komentar' ke posting asli Anda. Apakah itu hak istimewa orang-orang dengan reputasi lebih tinggi? Atau apakah saya mengabaikan yang sudah jelas? Maaf karena menambahkan ini sebagai 'jawaban'.]

Doug.McFarlane
sumber
1
Ini adalah jawaban, dan saya percaya ini adalah tingkat reputasi 100 (?) Untuk dikomentari. Selamat datang di Gamedev SE! :)
The Communist Duck
2

Anda mencatat bahwa karakter dapat berdiri di atas ubin yang berisi dinding, tetapi apakah Anda pernah menganggap setiap ubin sebagai dinding itu sendiri? Bahkan setengah ubin sebagai dinding secara horizontal atau vertikal?

Kelebihan: Perhitungan dan penempatan sepele, tabrakan sepele di mana semua perhitungan dan tabrakan hanya didasarkan pada koordinat penempatan dinding.

Cons: Ini dapat memengaruhi seluruh implementasi, kode, dan grafik Anda. Anda juga tidak ingin sepenuhnya meninggalkan metode Anda, Anda masih menginginkan kasus-kasus khusus di mana hanya sebagian ubin yang ada di dinding (Tautkan ke Masa Lalu dengan tebing).

Ini adalah bagaimana saya akan mendasarkan implementasi saya, maju, mengetahui bahwa saya selalu dapat mereferensikan ubin dan melakukan perhitungan tergantung pada lokasi karakter saya dan jenis ubin itu.

Sebuah tembok kastil, aku hanya bisa melakukan perhitungan dari tengah menggambar kotak yang aku tidak bisa lewati atau jika itu adalah batu bulat aku bisa melakukan perhitungan yang sama dari pusat tetapi sebagai lingkaran sehingga karakterku bisa bergerak seperti itu bulat.

Bryan Harrington
sumber
1

Maaf untuk mengatakan tetapi cara ketiga benar-benar cara untuk berpikir, yah, Anda sudah memiliki kemampuan untuk melakukan itu jadi mari kita lanjutkan dan pikirkan dua lainnya!

Masalahnya adalah bahwa dinding adalah nol lebar, dua dimensi (tinggi * panjang, dalam dunia 3D) memartisi dua kotak. Anda harus menganggapnya seperti itu tetapi Anda mungkin menggunakan solusi yang lebih sederhana seperti kapan membangun ruang bawah tanah Anda (terutama jika orang lain mungkin membuat bagian-bagian).

Tampaknya itu adalah permainan 2D Top-Down di mana dinding memiliki "lebar" sehingga mereka membutuhkan sudut itu (objek 'topi' Anda). Ini khusus 'grafis' jadi saya akan pergi dengan semacam:

Peta 2D dengan ubin (mis. Jenis ubin dan semacamnya).

Peta 2D dengan 2 dinding, mis. bawah dan kanan (dinding kiri akan menjadi 'dinding kanan' di ubin kiri dari yang ini).

+ Logika yang menarik semua dinding dan 'topi' dll.

Sehingga memisahkan logika dan grafik. Anda dapat melakukan "antarmuka" untuk menangani hal-hal seperti SetWall (ThisTile, LEFT, NOWALL) -> mengatur dinding kanan ubin kiri ThisTile ke "NOWALL" ...

Mungkin ini tampak buram tetapi masalahnya adalah Anda harus selalu mencoba untuk memiliki logika di satu sisi (data aktual, tanpa redundansi) dan di sisi lain 'gambar data' yang menghitung jika perlu 'cap' 'dll.

++

Valmond
sumber