Saya baru saja masuk ke XNA dan harus mengatakan saya menyukainya. Sebagai semacam game halo dunia saya memutuskan untuk membuat game klasik "Snake". Versi 90 derajat sangat sederhana dan mudah diimplementasikan. Tetapi ketika saya mencoba membuat versi yang memungkinkan rotasi 360 derajat menggunakan panah kiri dan kanan, saya mengalami masalah.
Apa yang saya lakukan sekarang berasal dari versi 90 derajat: Iterasi melalui setiap bagian tubuh ular mulai dari ekor, dan berakhir tepat di depan kepala. Ini bekerja sangat baik ketika bergerak setiap 100 milidetik. Masalah dengan ini adalah bahwa itu membuat gaya permainan berombak karena secara teknis permainan hanya berkembang pada 6 fps daripada potensi 60.
Saya ingin memindahkan ular setiap putaran permainan. Tapi sayangnya karena ular itu bergerak dengan ukuran ukuran kepalanya, ia berjalan terlalu cepat. Ini berarti bahwa kepala harus bergerak pada kenaikan yang jauh lebih kecil seperti (2, 2) ke arah itu daripada apa yang saya miliki sekarang (32, 32). Karena saya telah mengerjakan permainan ini selama beberapa minggu sambil mengelola sekolah, saya pikir saya telah berpikir terlalu keras tentang bagaimana menyelesaikan ini. Ini mungkin solusi sederhana, saya hanya tidak menangkapnya.
Berikut adalah beberapa kode semu untuk apa yang saya coba berdasarkan dari apa yang masuk akal bagi saya. Saya tidak bisa memikirkan cara lain untuk melakukannya.
for(int i = SnakeLength - 1; i > 0; i--){
current = SnakePart[i], next = SnakePart[i - 1];
current.x = next.x - (current.width * cos(next.angle));
current.y = next.y - (current.height * sin(next.angle));
current.angle = next.angle;
}
SnakeHead.x += cos(SnakeAngle) * SnakeSpeed;
SnakeHead.y += sin(SnakeAngle) * SnakeSpeed;
Ini menghasilkan sesuatu seperti ini: Code in Action . Seperti yang Anda lihat, setiap bagian selalu berada di belakang kepala dan tidak membuat efek "Jejak".
Contoh sempurna dari apa yang saya akan dapat ditemukan di sini: Worm Data . Bukan rotasi viewport tetapi efek trailing dari segitiga.
Terima kasih atas bantuannya!