2014-12-04 10 views
1

저는 libgdx로 작업하며 Stage에 3 개의 Actors이 붙은이 상황이 있습니다. act() 메서드가 스테이지에서 호출 될 때 각 액터의 act() 메서드가 호출되고 있습니다. 이것이 기본 동작이며 올바른 것입니다.libgdx Stage.dispose()가 액터를 즉시 분리하지 않습니다.

하지만 두 번째 액터의 장면을 처리 할 경우 act() 메서드는 세 번째 액터의 act() 메서드가 여전히 호출되고 있습니다. 나는이 행동을 기대하지 않았을 것이다. 무대에서 dispose() 메서드가 호출 된 직후에이 액터가 분리되지 않는 것과 같습니다. 이 세 번째 배우에 대한 마지막 호출은 예외적 인 경우가 발생하기 때문에 문제가 될 수 있으며이를 피하는 방법을 모르겠습니다. 장면이 이되기 전에 세 번째 액터의 act() 메서드가 마지막으로 호출되지 않으면 실제로는이 처리됩니다.

내가 이것을 피할 수있는 방법이 있습니까?

필자의 경우 두 번째 배우가 적이며 세 번째 배우가 방어 탑이기 때문에 게임 디자인을 변경하기가 어렵다. 적이 죽으면 화면을 넘어 게임을 보여주기 위해 장면을 처분합니다. 그러나 타워 여전히 원수가 죽을 때

+0

이것은 Stage의 디자인 된 동작입니다. 그것은 모든 액터의'act' 메쏘드가 다른 액터가 무엇을하고 있든 관계없이 프레임에서 한 번 호출된다는 것을 보장합니다. 대부분의 경우 이것이 가장 유용한 행동이라고 생각합니다. 어쩌면 당신은 예외를 일으키는 당신의 탑의 연기 방법에서 일어나고있는 것을 공유 할 수 있습니다. – Tenfour04

+0

고마워, 내 응용 프로그램의 일부를 재 설계하면이 문제를 피할 수 있다고 생각합니다. 그냥 그것이 처형 된 후에도 무대에서 연기하는 배우가 여전히 있다는 것이 이상하다는 것을 알았습니다. 나는 이것을 처리 할 수있는 깨끗한 방법이 없다고 생각합니다. – linu

답변

0

actor.remove() 또는 stage.clear()

+0

힌트를 주셔서 감사합니다, 나는 그것을 시도했지만 아무것도 바뀌지 않았습니다. 장면이 삭제되고 배우가 더 이상 붙어 있지 않더라도 세 번째 배우의 act() 메서드가 여전히 호출되는 것은 매우 이상합니다. 나는이 재귀 act() 메서드가 자신의 스레드에서 호출되고 있으며 그것을 조기에 멈출 수 없다고 생각한다. – linu

0

를 사용하는 대신 화면을 변경/직접 무대를 배치하는 시도 ... 백그라운드에서 작동, 당신은에 전달할 수 어떤 클래스가 당신의 무대를 당신의 배우들에 대한 논쟁으로 통제하고 있는지. 배우가 사망 한 경우, 예를 들어 무대를 들고있는 클래스의 boolean을 전환으로 설정 한 다음 stage.act()이 호출 된 후 전환해야하는지 확인한 다음 무대를 안전하게 처분하십시오. 그것은 매우 우아하지는 않지만 작동하는 것은 확실합니다. 외부 객체라고하는 전환을 구현하는 방법은 여러 가지가 있습니다. boolean은 매우 제한적일 수 있습니다. 어떤 화면으로 전환 할지를 게임에 알릴 수 없기 때문에 어떤 종류의 구현을 구현하려고 할 수 있습니다. Runnable. 다양한 방법이 있습니다.

아이디어 만 있습니다. 이게 도움이 되길 바란다.

+1

맞다. 이 동작은 한 번만 발생합니다 (스테이지가 배치 된 프레임의 경우) 무대가 처리 된 후에도 배우의 act 메소드가 계속 실행되는 것은 이상합니다. 내 응용 프로그램을 어떤 방식 으로든 다시 디자인하는 것보다이를 극복 할 수있는 다른 방법이 없다고 생각합니다. 감사 – linu