完成后,使用不同的值调用相同的动画

时间:2016-04-03 04:12:10

标签: java libgdx

我想对Label中的表格libGDX进行不同的操作。

在我的Table课程中,我创建了一个Labelscale\move\rotate,我每次操作完成时都会尝试调用此操作,因此每次都会运行在不同的字符串上,但我因为每次都打电话给我自己而崩溃了(我想)。

a= new Label("", mLabelStyleAmount);
addActor(a);   // in a Table class

    action = Actions.run(new Runnable() {

            @Override
            public void run() {
                lunchText(i);
            }
        });

private void lunchText (int i) {
    a.setText(strings[i]); 
    ScaleToAction up = Actions.scaleBy(30, 20, 5)
    a.setPosition(a.getWidth() * 0.2f, 50);
    a.addAction(Actions.sequence(up, action));
    i++;

}

这是每次我完成时调用相同方法的正确方法吗?

1 个答案:

答案 0 :(得分:0)

您遇到的例外情况是由action触发的方法中添加action引起的无限重复引起的。这意味着每次向行动中添加action时,都会再次添加action,依此类推......

第二件事是,当您使用addAction方法添加许多操作时,这些操作并行而非顺序

决议是使用libGDX SequenceAction并在开头生成所有action。它应该像:

    SequenceAction sequence = Actions.sequence();

    for(int i = 0; i < string.length; i++) {
        sequence.addAction(Actions.run(new Runnable() {
                                             @Override
                                             public void run() {
                                                a.setText(strings[i]); 
                                                a.setPosition(a.getWidth() * 0.2f, 50);                                                            
                                             }
                                        }, Actions.scaleBy(30, 20, 5)));

另一种方法是检查render()方法,如果a没有任何操作(表示上次操作已完成),然后添加新操作

    //render()
    if(a.getActions.size == 0)
        addActionToA();