Mengikuti tugas dan baru saja memulai dengan libGDX dengan membangun klon Snake kecil saya telah mengalami masalah yang mungkin akan membuat saya malu dalam beberapa saat.
Saat ini saya memiliki kepala ular (persegi panjang sederhana pada tahap ini) yang bergerak di sekitar kanvas permainan. Cara paling mudah untuk membangun sisa ular adalah memiliki kepala yang memiliki Java Collections LinkedList dari SnakeElements yang akan menambah / mengurangi ukuran sesuai dengan apa yang dilakukan pemain.
Memiliki daftar SnakeElements mengikuti kepala namun telah terbukti tidak sepele.
Fungsi saat ini melakukan ini adalah sebagai berikut dan dipanggil setiap kali kepala memperbarui posisinya:
private void moveTail (float x, float y, int direction) {
float tmpx, tmpy;
int tmpdirection;
int offset_x, offset_y;
for (SnakeSegment snse : tail) {
offset_x = 0;
offset_y = 0;
tmpx = snse.getX();
tmpy = snse.getY();
tmpdirection = snse.getDirection();
switch(direction) {
case 0:
offset_x = 0;
offset_y = -(2 + snse.width);
break;
case 1:
offset_x = -(2 + snse.width);
offset_y = 0;
break;
case 2:
offset_x = 0;
offset_y = (2 + snse.width);
break;
case 3:
offset_x = (2 + snse.width);
offset_y = 0;
break;
default:
System.out.println("wrong direction");
}
snse.setX(x + offset_x);
snse.setY(y + offset_y);
snse.setDirection(direction);
x = tmpx;
y = tmpy;
direction = tmpdirection;
}
}
yang sayangnya menghasilkan perilaku ini:
Setiap tips tentang cara membuat ekor ular yang bekerja dengan benar akan sangat dihargai :)
Cara saya melihatnya adalah sebagai sistem seperti "Caterpillar", di mana setiap bagian ular mengikuti bagian di depannya.
Dengan kata lain, setiap bagian dari ular akan menjadi Obyek dengan Posisi (x, y) , referensi ke bagian di depannya yang akan digunakan untuk bergerak dan fungsi untuk memproses posisi bagian di depan itu dan bergerak sesuai itu. Ular utama (Kepala) harus memiliki referensi untuk setiap bagian dari ular, dan akan memanggil fungsi yang bertanggung jawab untuk membuat bagian mengikuti pendahulunya, menjadi Kepala pendahulu bagian pertama.
Semoga ini bisa membantu!
sumber