Android 如何重置雪碧';它连接到实体时的位置?
我在游戏中使用一个池来管理子弹。唯一的问题是,当一个子弹因为涉及碰撞而从刚刚回收的池中获得时,尽管它的主体位置是使用Android 如何重置雪碧';它连接到实体时的位置?,android,multithreading,collision-detection,andengine,Android,Multithreading,Collision Detection,Andengine,我在游戏中使用一个池来管理子弹。唯一的问题是,当一个子弹因为涉及碰撞而从刚刚回收的池中获得时,尽管它的主体位置是使用Body.setTransform()重置的,但当它初始化时,子弹的精灵位置(用于使用Sprite.collidesWith(otherSprite)检测碰撞)重置不够快(因为它在物理线程中更新)。这意味着新创建的项目符号在创建时会引起碰撞,从而导致单个项目符号引起多个碰撞 我尝试在初始化时调用Bullet.sprite.setPosition(0,0),但这显然会产生干扰,因为在
Body.setTransform()
重置的,但当它初始化时,子弹的精灵位置(用于使用Sprite.collidesWith(otherSprite)
检测碰撞)重置不够快(因为它在物理线程中更新)。这意味着新创建的项目符号在创建时会引起碰撞,从而导致单个项目符号引起多个碰撞
我尝试在初始化时调用Bullet.sprite.setPosition(0,0),但这显然会产生干扰,因为在代码行就位时,项目符号根本无法显示。我应该怎么做来防止这个问题
项目符号创建:
bullets[bulletCounter] = bulletPool.obtainPoolItem();
bullets[bulletCounter].getBody().setTransform(shipBody.getTransform().getPosition(),0);
bullets[bulletCounter].getBody().setLinearVelocity(shipBody.getLinearVelocity());
bullets[bulletCounter].activate();
碰撞检测:
for(int i = 0; i < BULLET_MAX; i++){
if(bullets[i] != null && bullets[i].isActive()){
for(int j = 0; j < enemies.size(); j++){
//check for collision!
if(bullets[i].getSprite().collidesWith(enemies.get(j).getSprite())){
//-snip-
break;
}
}
}
}
for(int i=0;i
我很想看看您在调用onHandleActainItem
从池中获取子弹时正在做什么
当调用onHandleRecycleItem
时,将精灵位置设置为一些屏幕外值是否有意义,例如:
@Override
protected void onHandleRecycleItem(final Bullet pBullet) {
pBullet.disable();
pBullet.getSprite().setPosition(-1, -1);
}
这导致了同样的问题——子弹根本看不见。目前,我已经进行了一次可怕的黑客攻击-使用
BULLET.activate()
上的计时器设置延迟BULLET\u delay/2
。这是可行的,但我想要一个正确的解决方案!