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 :)