队列AndEngine多个实体改性剂(Queue multiple entity modifiers

2019-09-18 10:08发布

我想有一个精灵(“指针”下面)沿着两条路,一前一后。 这里是我的代码:

    scene.attachChild(pointer);

    pointer.clearEntityModifiers();
    pointer.registerEntityModifier(new MoveModifier(
        1.0f, 540, 960, 1000, 1000,
        new IEntityModifierListener() {
            public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {}
            public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
                clickSound.play();

                pointer.clearEntityModifiers();
                pointer.registerEntityModifier(new MoveModifier(
                    1.0f, pointer.getX(), pointer.getY(), 500, 2500,
                    new IEntityModifierListener() {
                        public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {}
                        public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
                            pointer.clearEntityModifiers();
                            pointer.detachSelf();
                        }
                    },
                    EaseCubicInOut.getInstance()
                ));
            }
        },
        EaseCubicInOut.getInstance()
    ));

沿第一条路径的指针移动的预期,然后clickSound播放,然后什么也没有发生。 第二MoveModifier没有任何效果。 我在做什么错在这里?

Answer 1:

我不知道为什么你的代码不能正常工作,但我认为你可以使用达到同样的事情SequenceEntityModifier

scene.attachChild(pointer);

    pointer.clearEntityModifiers();
    pointer.registerEntityModifier(new SequenceEntityModifier(
        new MoveModifier#1(...),
        new MoveModifier#2(...)));


Answer 2:

我的第一个猜测woud是,那之后的代码pointer.clearEntityModifiers(); 不再被执行,因为它注销修饰。 我只是想大声这里,所以请告诉我,如果我错了。 也许你可以尝试登录看到的东西,如果这个方法行后返回。 就像是:

pointer.clearEntityModifiers();
Log.v("EntityModifier", "the method continues...");

我总是觉得很难管理,因为这是从内部访问的变量的状态的内部类定义。 像你的情况的pointer 。 如果没有别的工作,你仍然可以尝试做这一切在一个运行。 因此,而不是配置的第一调整监听器和注册另一个,创建你自己的聆听者,地方一个标志,告诉它做什么和重复使用监听器:

public class MyModifierListener extends IEntityModifierListener{

    private Pointer pointer;   // declare your pointer, so you have a reference within the listener
    private boolean firstRun;  // a flag to check if it is the first time the modifier is used

    public MyModifierListener(Pointer pointer){
        super();
        this.pointer = pointer;  // init the pointer within the constructor
        this.firstRun = true;    // should be true the first time
    }

    public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
    }

    public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
        if(firstRun){
             clickSound.play();
         firstRun=false;
             pointer.registerEntityModifier(new MoveModifier(1.0f, pointer.getX(), pointer.getY(), 500, 2500, this), EaseCubicInOut.getInstance());
        }else{
             pointer.detachSelf();
        }
    }
}

并使用它类似的东西:

MyModifierListener myListener = new MyModifierListener(pointer);
pointer.registerEntityModifier(new MoveModifier(1.0f, 540, 960, 1000, 1000,     myListener), EaseCubicInOut.getInstance());

我无法测试这一点,所以这些都只是胡乱猜测。 告诉我,如果你找到的东西。

对于克里斯托弗



文章来源: Queue multiple entity modifiers in AndEngine