我打算将这个2D渲染引擎尽可能地模块化。我已经提出了,但还没有完成,绘制/更新精灵的优先级列表,以便我可以控制哪些精灵在彼此前面。
此代码用于遍历每个优先级列表并呈现该列表中的每个精灵。
//I don't entirely understand what this for-each type of loop does.
public static void renderSprites(ArrayList<ArrayList<AbstractSprite>> priorities){
for (ArrayList<AbstractSprite> priority : priorities){
for(AbstractSprite sprite : priorities.get(priority)){
renderSprite(/* what should I reference to get the relevant sprite? */);
//this is my best guess at what the nested loop would be, but it obviously doesn't work.
//any ideas?
}
}
}
答案 0 :(得分:4)
应该只是
for (ArrayList<AbstractSprite> priority : priorities){
for(AbstractSprite sprite : priority){
renderSprite(sprite);
}
}
这假设优先级arraylist按从高优先级到低优先级的顺序排序,因此您将渲染具有最高优先级的精灵。
请注意,get()
的{{1}}方法需要ArrayList
,表示您要访问的元素的索引。 For-each循环被实现为使索引对用户不透明,而只是简单地遍历Collection。
答案 1 :(得分:1)
for..each
构造迭代集合或数组中的每个元素。构造的形式为:
for(Type varName : [Array || Collection]){
//for each iteration varName is assigned an element in the collection/array
}
在您的示例中,外部循环已正确构造,并将为每次迭代将ArrayList
分配给priority
变量。由于您希望迭代ArrayList
优先级中的每个元素,因此内部循环未正确构造,但代码尝试使用priority
ArrayList
中的元素。以下代码显示了正确的结构,并将ArrayList
替换为List
接口,这比使用集合的具体类型更受欢迎。
public static void renderSprites(List<List<AbstractSprite>> priorities){
for (List<AbstractSprite> priority : priorities){
for(AbstractSprite sprite : priority)){
renderSprite(sprite);
}
}
}
答案 2 :(得分:1)
你大部分都在那里。你应该:
public static void renderSprites(List<List<AbstractSprite>> priorities){
for (List<AbstractSprite> priority : priorities) { // You have priority here
for (AbstractSprite sprite : priority) { // Now loop over priority to get sprite
renderSprite(sprite);
}
}
}