For循环从ArrayList中删除元素



我正在用Kotlin制作游戏。使用Libgdx和Box2d

1。函数通过Box2d创建主体,并在bodyArrayList中添加主体:

2。函数创建纹理并在textureArrayList

中添加这些纹理3。函数将bodyArrayList中的项与textureArrayList中的项进行匹配。函数有for循环。

4。函数是在撞墙时移除尸体。

5。当撞墙时移除纹理。

所有函数都在update()方法中工作。所有这些都工作得很好。然而,因为我不能删除数组列表的项目,而for循环在这些数组列表上工作,数组列表的项目正在增加,游戏1小时后开始变慢。数组列表的大小会像你猜的那样增大。如果我试图删除数组列表的项目,我在匹配()函数中采取异常,如你所料。

我的问题是如何从数组列表中删除这些项目,而"for循环"是否以安全的方式工作。

1。函数创建主体

var body = makeBody()
bodyArray.add(body)

2。函数创建纹理

var texture=makeTexture()
textureArray.add(texture)

3。函数将bodyArrayList中的项与textureArrayList中的项进行匹配

for (i in 0..bodyArray.size-1) {
textureArray[i].setPosition(bodyArray[i].position.x, bodyArray[i].position.y)
}

4。函数是在撞墙时移除尸体。

override fun beginContact(contact: Contact?) {
val userDataA = contact!!.fixtureA.userData.toString()
val userDataB = contact.fixtureB.userData.toString()
if ((userDataA == "ball" && userDataB == "wall")){
val bodyA=contact.fixtureA.body
Gdx.app.postRunnable(Runnable(){
run(){
world.destroyBody(bodyA) } })
}

5。当撞墙时移除纹理。

for (texture: MyTextures in MyTextures.getList(Ball::class.java.canonicalName)) {
if (ball.overlaps(wall)) {
ball.remove() }
}

您可以使用Iterator在迭代

时从Collections中删除项
val list = arrayListOf<Int>()
val listIterator = list.iterator()
while(listIterator.hasNext()){
//get item
val item = listIterator.next() 
//items can be removed safely using
listIterator.remove()
}

如果你正在使用badLogicArray class,你可以给你的纹理类,并在处置方法处置它的每一个项目

private val texture = Texture("badlogic.jpg")
private val myArray = Array<Texture>()
fun dispose(){
myArray[i].dispose()
}

这是关于纹理的更多信息的链接…

还可以处置Screen

相关内容

  • 没有找到相关文章