繁体   English   中英

通过arrayList循环

[英]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的好地方。 假设您在迭代时没有修改列表。

您可以使用whileList使用IteratorIterator列表:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM