Android AndEngine GLES1在Box2D碰撞崩溃应用程序期间销毁和创建对象
我还在做一个连锁反应游戏的实现。我有很多粒子在屏幕上反弹,用户可以点击屏幕创建一个“粘性”粒子 当任何普通粒子击中用户的粘性粒子时,该普通粒子也需要变得粘性,因此任何击中它的东西都会变得粘性,等等连锁反应 但是,当普通球第一次与用户的粘球碰撞时,应用程序会在LogCat中崩溃,并出现以下错误: 0x0000005c处的致命信号11 SIGSGV代码=1,线程24936 以下是我在检测到碰撞时使用的函数。我已对导致错误的行进行了注释:Android AndEngine GLES1在Box2D碰撞崩溃应用程序期间销毁和创建对象,android,box2d,andengine,Android,Box2d,Andengine,我还在做一个连锁反应游戏的实现。我有很多粒子在屏幕上反弹,用户可以点击屏幕创建一个“粘性”粒子 当任何普通粒子击中用户的粘性粒子时,该普通粒子也需要变得粘性,因此任何击中它的东西都会变得粘性,等等连锁反应 但是,当普通球第一次与用户的粘球碰撞时,应用程序会在LogCat中崩溃,并出现以下错误: 0x0000005c处的致命信号11 SIGSGV代码=1,线程24936 以下是我在检测到碰撞时使用的函数。我已对导致错误的行进行了注释: private void ParticleCollis
private void ParticleCollision(Contact contact)
{
if (contact.getFixtureA().getBody().getUserData() != null &&
contact.getFixtureB().getBody().getUserData() != null)
{
final String objA = (String)contact.getFixtureA().getBody().getUserData();
Body bodyA = contact.getFixtureA().getBody();
final String objB = (String)contact.getFixtureB().getBody().getUserData();
Body bodyB = contact.getFixtureB().getBody();
// Get the body objects for each of the bodies in the collision
Body pBody2 = objA.startsWith("particle_") ? bodyA : bodyB;
String cud = (String)pBody2.getUserData();
// Find the normal body in the collision in our mBodyList array
for (int i=0; i < mBodyList.size(); i++)
{
Body b = mBodyList.get(i);
String tud = (String)b.getUserData();
if(cud.equals(tud))
{
// We have a match
// Get the cooresponding Particle (to get it's X/Y pos)
Particle p = mParticleList.get(i);
float x = p.getX();
float y = p.getY();
// Remove the particle that collided from our Lists
mParticleList.remove(i);
mFixtureList.remove(i);
mBodyList.remove(i);
// Remove the particle from the scene and the Body from the PhysicsWorld
mScene.detachChild(p);
mPhysicsWorld.destroyBody(b);
// Create a new sticky particle where the old one was
particle = new Particle(x, y, mPurpleParticleTextureRegion, 100);
particle.setScale(0.3f);
mScene.attachChild(particle);
particleFixture = PhysicsFactory.createFixtureDef(10, 0.9f, 0.1f);
// Using the debugger, I see that this next line is causing the error
particle_body = PhysicsFactory.createBoxBody(mPhysicsWorld, particle, BodyType.StaticBody, particleFixture);
particle_body.setUserData("sticky");
mPhysicsWorld.registerPhysicsConnector(new PhysicsConnector(particle, particle_body, true, false));
// Save this info to the sticky particle lists
mStickyParticleList.add(particle);
mStickyBodyList.add(particle_body);
mStickyFixtureList.add(particleFixture);
}
}
}
}
以前,我在beginContact方法的mpphysisWorld.setContactListener中有该代码,但我了解到您无法在ContactListener中创建实体。所以,我把代码移到了你看到的函数中,我从ContactListener调用了它
如果您对我的错误有任何意见或建议,我们将不胜感激
谢谢 在Step函数中,您无法更改世界上的任何内容。您需要在Step函数之后创建新的实体 如果您试图在contact listener回调中销毁实体,同样的问题也会发生,这似乎是一种更常见的情况,因此您可以尝试搜索与删除实体相关的问题,例如
典型的方法是拥有某种列表,可以从调用步骤的主循环和联系人侦听器内部访问该列表。通过添加到列表中,记下需要修改的内容,然后在Step函数之后的主循环中,您可以执行更改。可能的重复项无法更改Step函数中的任何内容。在Step function.iforce2d之后创建新的主体-这是否意味着我不能修改ContactListener中的主体和装置?我是否应该在contact listener中标记对象,然后在LoadScene方法中更新主体/装置?iforce2d-如果您可以将注释更新为答案,我将接受它。谢谢你的指导!!