1

I'm trying put a LoopEntityModifier for a sprite to have continuous forward backward movement

But something is wrong with that.

Movement is not smooth.

I guess i'm making mistake on reseting loop.

How can i make smooth movement out of it.

LoopEntityModifier looper = new LoopEntityModifier (

    new IEntityModifierListener(){
        public void onModifierStarted(
                IModifier<IEntity> pModifier, IEntity pItem) {
            // TODO Auto-generated method stub
            Log.d("Modifier","Modifier Started !!");
        }

        public void onModifierFinished(
                IModifier<IEntity> pModifier, IEntity pItem) {
            // TODO Auto-generated method stub

            Log.d("Modifier","Modifier Finished !!");

            pModifier.reset();
        }
    },

    1,

    new ILoopEntityModifierListener(){
        public void onLoopStarted(
                LoopModifier<IEntity> pLoopModifier, int pLoop,
                int pLoopCount) {
            // TODO Auto-generated method stub

            Log.d("Modifier","Loop Started !!");    
        }

        public void onLoopFinished(
                LoopModifier<IEntity> pLoopModifier, int pLoop,
                int pLoopCount) {
            // TODO Auto-generated method stub

            Log.d("Modifier","Loop Finished !!");
        }
    },
    new SequenceEntityModifier(
            //Forward
            new MoveXModifier(.5f,mNextSprite.getX(),mNextSprite.getX()+50),

            //Backward
            new MoveXModifier(.5f,mNextSprite.getX(),mNextSprite.getX()-50))
);

mNextSprite.registerEntityModifier(looper);
4

2 に答える 2

2

MoveByModifier を使用できます。その仕事は良いです。

new SequenceEntityModifier(
        new MoveByModifier(0.5f, 100, 0),
        new MoveByModifier(0.5f, -100, 0)
));

使用しない場合は、コードでこれを置き換えます

new SequenceEntityModifier(
            // Forward
            new MoveXModifier(.5f, mNextSprite.getX(),
            mNextSprite.getX() + 50),
            // Backward
            new MoveXModifier(.5f, mNextSprite.getX() + 50,
            mNextSprite.getX())

LoopEntityModifier looper = new LoopEntityModifier (

new IEntityModifierListener(){
    public void onModifierStarted(
            IModifier<IEntity> pModifier, IEntity pItem) {
        // TODO Auto-generated method stub
        Log.d("Modifier","Modifier Started !!");
    }

    public void onModifierFinished(
            IModifier<IEntity> pModifier, IEntity pItem) {
        // TODO Auto-generated method stub

        Log.d("Modifier","Modifier Finished !!");

        pModifier.reset();
    }
},

1,

new ILoopEntityModifierListener(){
    public void onLoopStarted(
            LoopModifier<IEntity> pLoopModifier, int pLoop,
            int pLoopCount) {
        // TODO Auto-generated method stub

        Log.d("Modifier","Loop Started !!");    
    }

    public void onLoopFinished(
            LoopModifier<IEntity> pLoopModifier, int pLoop,
            int pLoopCount) {
        // TODO Auto-generated method stub

        Log.d("Modifier","Loop Finished !!");
    }
},
new SequenceEntityModifier(
            // Forward
            new MoveXModifier(.5f, mNextSprite.getX(),
            mNextSprite.getX() + 50),
            // Backward
            new MoveXModifier(.5f, mNextSprite.getX() + 50,
            mNextSprite.getX())
);

mNextSprite.registerEntityModifier(looper);
于 2013-03-19T16:21:24.373 に答える
0

Divyang Metalia の回答のおかげで、スプライトの連続的な前後の動きをアニメートする次の 2 つの方法を思いつきました。を使用し、SequenceEntityModifier終了時に単純にリセットします。アニメーションを停止するには、メソッドはstopAnimation()すべての修飾子をクリアし、スプライトの位置をリセットします。

public void startAnimation() {
    this.from = this.getX();       // just an example start point (global)
    float to = from +100 ;         // example end point for the animation

    MoveXModifier rightMovement = new MoveXModifier(0.5f, from, to);
    MoveXModifier leftMovement = new MoveXModifier(0.5f, to, from);

    SequenceEntityModifier sequenceEntityModifier = new SequenceEntityModifier(rightMovement, leftMovement) {
        @Override
        protected void onModifierFinished(IEntity pItem) {
            super.reset();
        }
    };
    sequenceEntityModifier.setAutoUnregisterWhenFinished(false);
    this.registerEntityModifier(sequenceEntityModifier);
}

public void stopAnimation() {
    this.clearEntityModifiers();
    this.setX(from);
}

明確化: メソッドはSprite拡張クラスの一部です。

于 2013-04-24T10:36:26.357 に答える