Ciao. Dopo aver ripreso a cercare di sistemare il problema ieri sera, ci sono riuscito

Sbagliavo ad attaccare la linee perché sono già attaccate, sono semplicemente invisibili. Dovevo comunque attaccare le linee nuove nel caso ne avessi bisogno. La mia classe LinePool è diventata quindi:
package test.gioco.ae;
import org.anddev.andengine.entity.primitive.Line;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.util.pool.GenericPool;
public class LinePool extends GenericPool<Line> {
Scene mScene;
public LinePool(Scene pScene){
mScene = pScene;
}
@Override
protected Line onAllocatePoolItem() {
// TODO Auto-generated method stub
Line line = new Line(0, 0, 0, 0, 5);
line.setColor(0, 1, 0);
mScene.attachChild(line);
return line;
}
@Override
protected void onHandleRecycleItem(final Line line) {
line.setIgnoreUpdate(true);
line.setVisible(false);
}
@Override
protected void onHandleObtainItem(final Line line) {
line.reset();
}
}Chiamando reset viene resettata la linea, ma l'entitymodifier è ancora lì presente, quindi devo chiamare anche clearEntityModifiers.
Quindi modifico l'onSceneTouchEvent:
scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
@Override
public boolean onSceneTouchEvent(Scene pScene,
TouchEvent pSceneTouchEvent) {
// TODO Auto-generated method stub
if (pSceneTouchEvent.isActionDown()) {
sX = pSceneTouchEvent.getX();
sY = pSceneTouchEvent.getY();
} else if (pSceneTouchEvent.isActionMove()) {
mX = pSceneTouchEvent.getX();
mY = pSceneTouchEvent.getY();
final Line line = getLineFromLinePool();
line.clearEntityModifiers();
line.setPosition(sX, sY, mX, mY);
line.setColor(0, 1, 0);
final Body bodyLine = PhysicsFactory.createLineBody(
mPhysicsWorld, line, lineFixtureDef);
bodyLine.setUserData("line");
sX = pSceneTouchEvent.getX();
sY = pSceneTouchEvent.getY();
final LoopEntityModifier entityModifier = new LoopEntityModifier(
new IEntityModifierListener() {
@Override
public void onModifierStarted(
final IModifier<IEntity> pModifier,
final IEntity pItem) {
}
@Override
public void onModifierFinished(
final IModifier<IEntity> pEntityModifier,
final IEntity pEntity) {
}
}, 1, new ILoopEntityModifierListener() {
@Override
public void onLoopStarted(
final LoopModifier<IEntity> pLoopModifier,
final int pLoop, final int pLoopCount) {
}
@Override
public void onLoopFinished(
final LoopModifier<IEntity> pLoopModifier,
final int pLoop, final int pLoopCount) {
Main.this.runOnUpdateThread(new Runnable() {
@Override
public void run() {
sendLineToLinePool(line);
final PhysicsConnector physicsConnector = mPhysicsWorld
.getPhysicsConnectorManager()
.findPhysicsConnectorByShape(
line);
mPhysicsWorld
.unregisterPhysicsConnector(physicsConnector);
mPhysicsWorld.destroyBody(bodyLine);
}
});
}
},
new SequenceEntityModifier(new AlphaModifier(1, 1,
0)));
line.registerEntityModifier(entityModifier);
}
return false;
}
});sendLineToLinePool e getLineFromLinePool rimangono così:
private void sendLineToLinePool(Line line) {
LINE_POOL.recyclePoolItem(line);
}
private Line getLineFromLinePool() {
return LINE_POOL.obtainPoolItem();
}Spero che questo possa aiutare qualcuno
