Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何重置雪碧';它连接到实体时的位置?_Android_Multithreading_Collision Detection_Andengine - Fatal编程技术网

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
。这是可行的,但我想要一个正确的解决方案!