1

我正在尝试为精灵放置一个 LoopEntityModifier 以连续向前向后移动

但这有些不对劲。

运动不顺畅。

我想我在重置循环时犯了错误。

我怎样才能使它顺利移动。

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 的回答,我想出了以下两种方法来为精灵的连续来回运动设置动画。它使用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 回答