2013-10-08 1 views
0

간단한 틸팅 게임을 쓰고 있습니다. 휴대 전화를 기울이는 방향으로 화면 위로 볼을 굴립니다.Android - 센서 (서비스, 스레드, 활동)를 실행하는 방법?

그래서 센서 데이터를 얻는 방법에 대한 예제를 다운로드했는데 제대로 작동합니다 (오일러 각도 문제를 피하기 위해 회전 행렬을 사용합니다). 하지만 더 큰 앱에 넣으려고했는데 제대로 작동시키지 못했습니다.

내 첫 번째 아이디어는 별도의 스레드에서 경사 센서를 실행하는 것이지만 내 클래스 : public class TiltSensor extends Thread 구현 SensorEventListener 이 제대로 작동하지 않습니다. 한 라운드 값을 얻으면 중지됩니다.

어떻게이 앱을 구현하겠습니까?

UI 스레드를 차단하고 싶지 않아 게임을 실행하기 위해 별도의 스레드 (GameHandler)가 필요하다고 생각하고 runOnUithread를 호출하고 거기에서 뷰를 무효화합니다. 또한 화면에서 행렬 표현을 분리하여 화면을 행렬로 표현한 다음 화면에서 그 행렬을 사용하여 화면이 어떻게 보이는지를 알 수 있습니다. 그러나 TiltSensor를 구현하는 가장 좋은 방법은 무엇인지 확신 할 수 없습니다. 그것은 별도의 스레드 또는 GameHandler와 동일한 스레드에서 실행해야합니까? SensorManager가 실제로 GameHandler 스레드에서 onSensorChanged를 호출하는지 어떻게 확인합니까? 내 겸손 경험에

답변

1

, 당신이해야 :

A)는 일반적으로 주 스레드에 SensorListener을 등록하지만,이 두 가지를 생성 (또는 생성자에 필요) WorkerThreads으로합니다.

B) 두 스레드의 루퍼 참조를 가져와 향후 요청을 기다리는 데 사용하십시오.

B) 메인 스레드에서 onSensorChanged를 정상적으로 들으시 고, 아무 것도하지 말고 (중요합니다), 게임 논리를 처리 할 새로운 실행 가능 오브젝트에 값 사본을 위임하십시오.

C) 그에 따라 WorkerThread 루퍼 참조에서 새 실행 파일 객체를 큐에 넣습니다.

D) 실행 파일 (이미 메인 스레드와 떨어져 있음)을 자신이해야 할 일로 만들고,보기를 업데이트하는 데 관심이있는 사람이상의 할 수있는 싱글 톤에 변경 사항을 동기화하십시오.