我正在用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
类