Andengine. Эффект частиц слишком медленно следует за спрайтом. Как уменьшить задержку

Я использую систему частиц, которая следует за мячом. Когда мяч движется, эффекты частиц слишком медленно следуют за спрайтом.

Я объявляю частицу таким образом:

final CircleOutlineParticleEmitter ballEmitter = new CircleOutlineParticleEmitter(0, 0, 6);
final ParticleSystem particleBallSystem = new ParticleSystem(ballEmitter, 30, 30, 180, this.mParticleTextureRegion);

particleBallSystem.addParticleInitializer(new ColorInitializer(0, 0, 1));
particleBallSystem.addParticleInitializer(new AlphaInitializer(1));
particleBallSystem.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
particleBallSystem.addParticleInitializer(new VelocityInitializer(-2, 2, -2, 3));
particleBallSystem.addParticleInitializer(new RotationInitializer(0.0f, 180.0f));

particleBallSystem.addParticleModifier(new org.anddev.andengine.entity.particle.modifier.ScaleModifier(1.0f, 1.2f, 0, 5));
particleBallSystem.addParticleModifier(new ColorModifier(0, 0, 0.2f, 0.1f, 0, 1, 1, 3));
particleBallSystem.addParticleModifier(new ColorModifier(0, 0, 0.1f, 0.2f, 1, 1, 4, 6));
particleBallSystem.addParticleModifier(new AlphaModifier(0, 1, 0, 1));
particleBallSystem.addParticleModifier(new AlphaModifier(1, 0, 5, 6));
particleBallSystem.addParticleModifier(new ExpireModifier(1, 6));

И установка центра в событии касания (при касании):

ballEmitter.setCenter(newX-15, newY);

Есть ли способ уменьшить задержку системы частиц?


person Claudio Ferraro    schedule 13.02.2012    source источник
comment
есть ли у вас успехи в этом?   -  person AZ_    schedule 14.03.2012


Ответы (1)


Расширьте класс PhysicsConnector и переопределите метод onUpdate. Установите центр эмиттера в методе обновления. Таким образом, позиция излучателя обновляется каждый раз, когда позиция спрайта обновляется до значений тела.

class MyPhysicsConnector extends PhysicsConnector
{
    public MyPhysicsConnector(IAreaShape pAreaShape, Body pBody, boolean pUdatePosition, boolean pUpdateRotation)
    {
        super(pAreaShape, pBody, pUdatePosition, pUpdateRotation);
    }

    @Override
    public void onUpdate(float pSecondsElapsed)
    {
        super.onUpdate(pSecondsElapsed);

        final IShape shape = this.mShape;

        ballEmitter.setCenter(shape.getX(), shape.getY());
    }
}

Убедитесь, что при подключении тела мяча к его спрайту вы передаете экземпляр MyPhysicsConnector.

physicsWorld.registerPhysicsConnector(new MyPhysicsConnector(ballSprite, ballBody, true, true));
person JeffG    schedule 18.09.2013