背景
我有一个精灵(一个openGL quad)从屏幕顶部“跌落”到底部。
当它到达屏幕的底部时,它的值会重置并再次开始(从上到下),但在X轴上移动到新的X位置。
我正在做的是将X位置存储在一个ArrayList中(可能只有1个位置,因此它会一次又一次地落在同一个位置或10个位置,因此每次落下都会略微移动。)
问题
我无法解决的是如何通过这个arraylist并将精灵的新X位置设置为“下一个”arraylist位置中的值,同时记住可能没有“下一个”位置。
所以.......(这是伪代码)....一旦精灵下降并且它的Y位置已经重置回屏幕顶部:
spriteX = value_held_in_next_arrayList_position(if_there_is_one)
由于我的游戏的不同级别将具有不同数量的位置,我无法明确地说“转到位置2”,因为arrayList只有1的大小。基本上我想要的是说'转到下一个位置'和'如果没有下一个位置',那么回到0位置。
答案 0 :(得分:1)
ArrayList是可迭代的,所以这是一个使用an iterator的好地方。假设您在迭代时没有修改列表。
答案 1 :(得分:0)
你想要做的是获取迭代器,然后做一个while循环,如果迭代器有下一个你抓住它并继续,否则你出来。
示例代码:
Iterator positions = spriteXPositions.iterator();
while(positions.hasNext()) {
mySprite.position.X = positions.next();
}
答案 2 :(得分:0)
您可以使用List
使用while
从列表中迭代Iterator
:
List<YourElement> yourList;
...
Iterator<YourElement> iterator = yourList.iterator();
while(iterator.hasNext()) {
final YourElement yourElement = iterator.next();
// Do whatever with yourElement
if (iterator.hasNext()) {
// Do whatever if there's a next element to yourElement
}
}
答案 3 :(得分:0)
我会使用Iterator对象。既然你想要它循环,你不知道你要从中抽象出来的大小。我们可以创建一个泛型循环方法,它接受迭代器和父ArrayList,如果它已经在最后,它将循环遍历它。
private void loop(Iterator it, ArrayList parent) {
if(!it.hasNext()) {
it = parent.iterator();
}
//Your logic here instead of logging
//Assume always at least 1 element in arraylist
Log.d("test", it.next() + "");
}
我们可以测试一下:
ArrayList<Float> positions = new ArrayList<Float>();
positions.add(0.123123f);
positions.add(0.2312f);
positions.add(0.323123f);
Iterator<Float> posIter = positions.iterator();
for(int i = 0; i < 100; i++) {
loop(posIter, positions);
}
答案 4 :(得分:0)
您可以使用%运算符返回列表开头。
int nextSpriteX() {
currentXPositionIndex = (currentXPositionIndex + 1) % xPositions.size();
return xPositions.get(currentXPositionIndex);
}
答案 5 :(得分:0)
感谢所有提供答案的人,我最后采用了不同的方法,如果有人遇到类似问题,我就这样做了:
if (xPosition.get(0)<X.size()-1){
xPosition.set(0, xPosition.get(0)+1);
}
else {xPosition.set(0, 1);
}
sprite.xScreen=xPosition.get(xPosition.get(0));
xPosition是一个arraylist,第一个元素只是指向另一个包含X Position的元素的指针 - 所以类似于:
xPosition.add(1); //Element 0 - pointer to subsequent elements (Points to element 1)
xPosition.add(100); //Element 1 - X position 1
xPosition.add(200)l //Element 2 - X position 2
xPosition.add(400); //Elemen 3 - X Position 3
Cheers!