2011-01-31 7 views
1

나는 턴 기반 게임을 작성 했으므로 AI 플레이어와 사람 플레이어가 섞여있을 수 있습니다. 각 플레이어가 자신의 차례를 가져 오는 순서는 매 라운드마다 다릅니다. 현재 활동의 onCreate 함수에서 AI를 실행하면서 Android에 친숙하지 않은 방식으로 작업하고 있습니다. 분명히 이것을 바꿔서 내 생각을 다음과 같이 바꾸고 싶습니다. -게임 스레드에서 활동 불러 오기 (및 돌아 오기)

메인 메뉴에서 모든 게임 로직을 실행할 스레드를 설정하는 활동을 만들고 싶습니다. 쓰레드는 플레이어를 차례로 돌아가며 각각의 이동 결과를 표시합니다. 각 AI 플레이어는 여기에서 로직을 업데이트합니다. 그러나 인간 플레이어의 경우 플레이어가 많은 세부 사항을 변경하고보고 업데이트 할 수 있으므로 활동을 만들어야합니다. 어떻게하면 스레드에서이 작업을 수행 할 수 있으며 인간이 작업을 마친 후에도 스레드가 다른 플레이어의 처리를 계속할 수 있습니까?

답변

0

게임 논리 스레드는 Activity에 대한 참조를 유지해야합니다 (Activity 파생 클래스의 중첩 된 클래스 일 수 있음).

게임 로직이 UI를 사용하여 모든 작업을 수행해야하는 경우에는 Activity.runOnUiThread()을 사용해야합니다. 먼저 모든 플레이어의 상태를 업데이트 한 다음 runOnUiThread()을 게임 틱당 한 번만 호출하는 것이 좋습니다.

runOnUiThread에 전달한 실행 파일에서 startActivity()이 필요하면 문제가되지 않습니다. UI 스레드 (예 : 플레이어가 게임에서 무언가를 변경하기 위해 버튼을 누르는 것)에서 수집 한 데이터를 게임 스레드로 전달하려면 동기화가 필요합니다.

+0

@Rok : AI 플레이어를 간단한 게임으로 처리 할 수있는 좋은 방법을 찾고 있습니다. 나 자신을 위해 노력 중이며이 접근법이 잘 작동하는지 알고 싶습니다. 또한 AsyncTask는 어떻게 사용 했습니까? –

0

게임 논리에 대한 서비스 구현을 살펴보십시오. 서비스는 UI 구성 요소가없는 활동과 같습니다. 그러면 AI 스레드가 있고 플레이어 (UI 스레드를 통해)가 서비스와 상호 작용할 수 있습니다. AI 스레드와 UI는 작업을 수행하기 위해 게임 상태에 대한 정보가 필요하기 때문에 서비스는 게임 상태 쿼리도 지원해야합니다.

관련 문제