我正在尝试更新我的数组,所以如果你向第一个数组尾部添加一些东西[0]整个数组更新并移动1到下一个,最后一个尾部[49]被移除。
因此,如果我向tail [0]添加一个值,我希望tail [1]得到旧尾[0]值,tail [2]得到旧尾[1]值和尾[3]得到旧尾[2]的价值。旧尾[3]的价值将被删除。这就像一个数组推送,每次都删除最后一个值。
到目前为止我尝试了这个,但我无法让它发挥作用。
创建数组:
Tail[] tail = new Tail[50];
为整个数组赋值:
for(int i = 0; i < tail.length; i++){
tail[i] = new Tail(0,0);
}
更新数组,以便添加新值并删除最后一个值。
public void tail(){
tail[0] = new Tail(ball.getX(),ball.getY());
for(int i = 1; i < tail.length; i++){
tail[i] = new Tail(tail[i-1].x,tail[i-1].x);
}
}
尾巴课程:
public class Tail {
public float x;
public float y;
ShapeRenderer shapeRenderer;
SpriteBatch batch;
public boolean active = false;
public Tail(float x, float y){
shapeRenderer = new ShapeRenderer();
batch = new SpriteBatch();
this.x = x;
this.y = y;
batch.begin();
shapeRenderer.begin(ShapeType.Filled);
shapeRenderer.circle(x, y, 16);
shapeRenderer.setColor(Color.BLACK);
shapeRenderer.end();
batch.end();
Gdx.app.log("TailX"+x, "TailY"+y);
}
}
尾部空洞最终导致我的游戏失败,这是解决这个问题的最佳方法吗?
答案 0 :(得分:1)
不要使用数组这样的东西 - 改用堆栈。
答案 1 :(得分:1)
尝试以下代码(已更新)
public void tail(){
float tempx = ball.getX();
float tempy = ball.getY()
for(int i =(tail.length - 1); i > 0; i--){
tail[i].x = tail[i-1].x;
tail[i].y = tail[i-1].y;
}
tail[0].x = tempx;
tail[0].y = tempy;
}
答案 2 :(得分:1)
首先,当您尝试移动尾部时,您似乎正在创建新的Tail
。有什么理由吗?您应该只需移动引用即可重复使用相同的实例。
此外,在您的代码中,您尝试在移动所有其他元素之前在位置0,处插入新元素。你需要反过来做,以确保只删除最后一项。应该可以这样做:
for(int i = tail.length - 2; i >= 0; i--){
tail[i + 1] = tail[i];
}
tail[0] = new Tail(ball.getX(),ball.getY());
这样您只需移动Tail
实例,而不是创建新实例。除非我误解了某些内容,否则这应该有用。
听起来你可以从使用队列中获益。队列设计用于在一端插入元素并从另一端检索项目。
如果您使用LinkedList
(它实现了Deque
接口)而不是数组,那么您应该可以执行以下操作:
tail.addFirst(new Tail(ball.getX(), ball.getY()));
tail.removeLast();
答案 3 :(得分:1)
此功能类似于 FIFO 。因此,您可以使用Queue来实现此功能。
Object firstElement = queue.remove();
要从队列中删除元素,请调用 remove()方法。此方法删除队列头部的元素。在大多数Queue实现中,队列的头部和尾部位于相反的两端
Queue queueA = new LinkedList();
queueA.add("element 0");
queueA.add("element 1");
queueA.add("element 2");
add()方法将元素添加到尾部
现在,如果你调用queueA.remove();
它将插入第一个元素
element 0
现在使用它并实现自己的逻辑。
答案 4 :(得分:0)
您不应该使用数组。使用像Stack这样的东西,如下所示:
Stack stack = new Stack();
//you add elements to stack using push method
stack.push("Test");
stack.push("Test2");