Saya dapat mengidentifikasi dua masalah. Yang pertama terkait dengan gerakan halus dan yang kedua terkait dengan karakter zip dari layar.
Untuk membuat gerakan halus, Anda dapat menggunakan teknik yang disebut Linear Interpolasi atau (LERP) untuk memuluskan gerakan. Pada dasarnya cara kerjanya adalah antara titik awal dan titik akhir Anda menghitung satu set jarak yang semakin kecil untuk meniru gerakan halus dan melambat ketika titik akhir hampir tercapai.
Contoh paling sederhana dari fungsi ini adalah:
//point1 is the current position, will be starting position on first call
//point2 is the target position
//epsilon is the % of the distance between current and target you want
//to cover per game physics loop (a fixed realworld time based loop).
//The smaller the % the "smoother" the motion.
float lerp(float point1, float point2, float epsilon)
{
return point1 + epsilon * (point2 - point1);
}
Saat karakter bergerak lebih dekat ke titik 2 secara bertahap akan melambat. Catatan meskipun mereka tidak akan pernah benar-benar menyentuh titik 2 tetapi mendekati tanpa batas. Anda harus memperbaiki ini dan jika pemain kurang dari jarak yang sangat kecil dari titik 2, kami dapat mempertimbangkan pemain berada di titik 2.
Masalah kedua yang Anda sebutkan terkait dengan karakter Anda terbang di layar. Ini adalah hasil dari input yang dibaca setiap penyegaran loop game yang dikombinasikan dengan gerakan instan antar ubin.
Idealnya untuk menyelesaikan ini, dalam kode Anda, Anda perlu memutuskan
- Berapa banyak waktu di dunia nyata yang diperlukan karakter untuk berpindah dari titik 1 ke titik 2.
- Atur Lerp Anda untuk menjalankan antara titik 1 dan dua selama durasi ini
- Baca input lagi setelah titik 2 telah tercapai untuk memutuskan ke mana harus pergi