2013-07-25 2 views
2

일련의 액션을 정의했으며이를 여러 액터에 추가하려고합니다. 여기에 코드가 있습니다 :Libgdx - 작업; 여러 액터에 하나의 액션 추가

 ParallelAction actions = new ParallelAction(); 

     RotateByAction rotateAction = new RotateByAction(); 
     rotateAction.setAmount(rotationAmount); 

     ScaleByAction scaleAction = new ScaleByAction(); 
     scaleAction.setAmount(-0.01f); 

     DelayAction delayAction = new DelayAction(); 
     delayAction.setDuration(0.05f); 

     RepeatAction rAction = new RepeatAction(); 
     rAction.setCount(100); 

     actions.addAction(rotateAction); 
     actions.addAction(scaleAction); 
     actions.addAction(delayAction); 
     rAction.setAction(actions); 



     for(Monster mon : mons) // mons is ArrayList of type Monster (which extends Image) 
      mon.addAction(rAction); 

위의 논리는 단지 내 ArrayList의 마지막 액터에 동작을 추가합니다. 여러 배우와 동일한 액션을 사용할 수없는 이유는 무엇입니까? 액터만큼 많은 액션을 정의해야합니까, 아니면 다른 방법으로 액터를 정의 할 수 있습니까?

여기 풀장을 보았습니다. https://code.google.com/p/libgdx/wiki/scene2d 나는 그것을 잡지 않은 것 같습니다. 내 문제에 유용할까요? 그렇다면 어떻게?

답변

4

모든 액터가 하나의 시퀀스를 참조하기 때문에. 그래서 시퀀스를 가지고있는 모든 액터는 똑같습니다. 예를 들어 10 명의 액터에 대해 1 개의 스프라이트를 사용하고 1 명의 액터에서 그것을 변경하면 모든 다른 액터도 변경됩니다. 따라서 액터 10 개에 시퀀스를 추가하면 속도가 10 배 빨라집니다. 액터의 .act()은 시퀀스 을 업데이트하기 때문에 (모든 액터 내부에서 모든 작업이 델타 시간만큼 업데이트되기 때문에!). 따라서 모든 액터가 시퀀스를 업데이트하는 이유는 작동하지 않는 이유입니다. 모든 배우에게 새로운 스퀘어를 만들어야합니다.

for(Monster mon : mons){ // mons is ArrayList of type Monster (which extends Image) 
     RotateByAction rotateAction = new RotateByAction(); 
     rotateAction.setAmount(rotationAmount); 

     ScaleByAction scaleAction = new ScaleByAction(); 
     scaleAction.setAmount(-0.01f); 

     DelayAction delayAction = new DelayAction(); 
     delayAction.setDuration(0.05f); 

     RepeatAction rAction = new RepeatAction(); 
     rAction.setCount(100); 

     actions.addAction(rotateAction); 
     actions.addAction(scaleAction); 
     actions.addAction(delayAction); 
     rAction.setAction(actions); 
     mon.addAction(rAction); 
} 

이 5 월은 초기화에서 더 오래 걸릴 않지만 그것은 당신의 버그를 수정해야합니다 단순히 여기에 코드를 변경합니다.

+0

답장을 보내 주셔서 감사합니다.이 문제는 SequenceAction에서만 발생합니까 아니면 모든 문제에 해당합니까? – Jazib

+0

모든 문제에 대해 사실이어야합니다! 내가 Actor의 모든 일반적인'act()'에서 말했듯이 당신은 델타 시간만큼 액션을 업데이트합니다. 그리고 그들이 같은 행동을한다면 당신은 행동을 여러 번 업데이트해야합니다. 그래서 모든 행동을해야합니다! – BennX

관련 문제