ทำตามการมอบหมายและเพิ่งเริ่มต้นกับlibGDXโดยการสร้าง Snake clone ขนาดเล็กที่ฉันพบเจอปัญหาที่ฉันอาจจะละอายใจในระยะเวลาหนึ่ง
ขณะนี้ฉันมีหัวงู (สี่เหลี่ยมเรียบง่ายในขั้นตอนนี้) เคลื่อนที่ไปทั่วผืนผ้าใบของเกม วิธีที่ตรงไปตรงมาที่สุดในการสร้างส่วนที่เหลือของงูนั้นคือการมีหัวของตัวเองเป็น Java Collections LinkedList รายการของ SnakeElements ซึ่งจะลดขนาด / ตามขนาดของสิ่งที่ผู้เล่นทำ
มีรายการ SnakeElements นี้ตามหัว แต่ได้พิสูจน์แล้วว่าไม่น่ารำคาญ
ฟังก์ชั่นปัจจุบันการทำเช่นนี้มีดังต่อไปนี้และถูกเรียกว่าทุกครั้งที่หัวหน้าอัพเดตตำแหน่ง:
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;
}
}
ซึ่งน่าเสียดายที่ผลลัพธ์ในพฤติกรรมนี้:
เคล็ดลับใด ๆ เกี่ยวกับวิธีการทำให้หางงูทำงานอย่างถูกต้องจะได้รับการชื่นชมมาก :)