![](/img/trans.png)
[英]FileWriter cycling through Arraylist but not writing to text file
[英]Cycling through arrayList
背景
我有一个精灵(一个openGL Quad),它从屏幕的顶部“落”到底部。
当它到达屏幕底部时,其值将被重置,并再次开始(从上到下),但沿X轴移动到新的X位置。
我正在做的是将X位置存储在ArrayList中(可能只有1个,所以它一遍又一遍地落在同一位置,或者10个,所以每次跌落时它都会稍微移动)。
问题
我无法解决的问题是如何遍历此arraylist并将精灵的新X位置设置为“ next” arraylist位置中所保持的值,同时要记住可能没有“ next”位置。
所以.......(这是伪代码)....一旦精灵掉落并且其Y位置已重置回屏幕顶部:
spriteX = value_held_in_next_arrayList_position(if_there_is_one)
由于我的游戏的不同级别将具有不同数量的位置,因此在arrayList的大小仅为1的情况下,我无法明确地说“进入位置2”。基本上,我要说的是“进入下一个位置”和“如果没有下一个职位”,则返回到位置0。
ArrayList是可迭代的,因此这是使用iterator的好地方。 假设您在迭代时没有修改列表。
您可以使用while
在List
使用Iterator
来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
}
}
您想要做的是获取迭代器,然后执行while循环,如果迭代器有下一个迭代器,则将其抓住并继续,否则就会退出。
示例代码:
Iterator positions = spriteXPositions.iterator();
while(positions.hasNext()) {
mySprite.position.X = positions.next();
}
我将使用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);
}
您可以使用%运算符返回列表列表的开头。
int nextSpriteX() {
currentXPositionIndex = (currentXPositionIndex + 1) % xPositions.size();
return xPositions.get(currentXPositionIndex);
}
感谢所有提供答案的人,最后我采取了不同的方法,以防万一有人遇到类似的问题,这就是我所做的:
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!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.