Saya punya pertanyaan yang membuat saya gila karena saya pikir seharusnya cukup mudah untuk menemukan tutorial tentang itu. Saat ini saya menggunakan XNA dan Farseer untuk membuat game platformer sederhana. Aku hampir selesai dengan itu tapi aku ingin monsterku menjadi lebih pintar. Dalam hal ini itu berarti aku tidak ingin monsterku jatuh dari tebing.
Sederhananya, saya ingin sesuatu yang memeriksa area di depan "monster" saya untuk menentukan kapan monster itu harus mengubah arah. Bisakah kalian mengarahkan saya ke arah yang benar?
Apa yang harus saya gunakan, harus ada solusi sederhana atau algoritma sederhana untuk memeriksa ini, bukan?
sumber
Satu cara naif untuk mengimplementasikannya adalah dengan menggunakan raycasting.
Hitung di mana monster Anda akan berada dalam beberapa waktu kecil (mungkin bingkai). Dari posisi itu (atau jika Anda ingin menjadi lebih kuat, posisi itu +/- area pembatas musuh Anda) melakukan raycast ke bawah. Jika itu tidak mengenai sesuatu dalam rentang yang sesuai (tergantung di mana Anda memulai raycast Anda secara vertikal, ketinggian karakter, "ukuran langkah" yang Anda inginkan, dll.) Anda dapat mengetahui bahwa ada tebing di mana karakter ingin berada, dan memutuskan untuk mengubah arah dengan tepat.
sumber
Dengan AI saya, saya cukup memeriksa apakah ada platform di bawah dan ke arah perjalanannya (tidak menggunakan sistem tiles, hanya sistem tabrakan asyik). Jika tidak ada - atau jika menyentuh blok padat, itu akan menjadi bingung dan berbalik.
Dengan cara ini Anda dapat memiliki peta dinamis dan masih memiliki AI yang berfungsi (istilah digunakan secara longgar).
sumber
Saya menduga Anda menggunakan peta ubin, dalam hal ini solusinya adalah melakukannya berdasarkan indeks ubin. Anda perlu mencari di ubin apa rakasa Anda aktif, dengan rumus berikut:
Setelah Anda mengetahui ini, Anda harus menemukan ke arah X mana Anda akan pergi (untuk memeriksa blok di depan):
Sekarang Anda memiliki arah X yang dinormalisasi untuk bekerja dengannya.
Selanjutnya, Anda akan ingin memeriksa blok di sekitar untuk melihat apakah Anda harus mengubah arah:
Anda mendapatkan ide umum. Pastikan Anda kembali
TileCollision.Impassable
(atau apa pun) jika indeks ubin berada di luar peta, untuk mencegah program Anda menabrak indeks yang tidak valid, dan itu juga mencegah monster keluar di luar peta.Saya kira itu benar-benar tergantung pada cara Anda menangani ubin, tetapi ini adalah solusi yang bekerja untuk saya.
Berdasarkan tutorial dari http://www.sgtconker.com/ (walaupun situs web sedang down saat saya menulis ini)
sumber
Atur kotak di bagian luar platform yang ada di layer terpisah, dan minta monster memeriksanya, sehingga mereka tidak akan jatuh tetapi pemain masih bisa.
sumber