2016-04-03 61 views
0

我想對libGDX中的表Label執行不同的操作。完成時使用不同的值調用相同的動畫

在我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++; 

} 

這是每次完成後調用相同方法的正確方法嗎?

回答

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(); 
相關問題