ゲームで弾丸を管理するためにプールを使用しています。唯一の問題は、衝突に関係していたためにリサイクルされたばかりのプールから Bullet が取得されたBody.setTransform()
場合です。Bullet の位置は初期化時に使用してリセットされますが、Bullet のスプライトの位置 ( を使用して衝突を検出するために使用されます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;
}
}
}
}