2012-02-14 6 views
0

OpenGL을 사용하여 iPhone 게임을 만들고 있습니다. 게임 컨트롤 인터페이스를 작성하기 시작했을 때 문제가 발생했습니다. 나는 4 개의 버튼 (왼쪽, 오른쪽, 공격, 점프)을 가지고 있으며, 동시에 누를 수 있어야합니다. 내가 필요한 것은 Stationary를 touches하는 함수와 같다 (touchesBegin, Moved와 End 만있다). 나는 현재 화면상의 모든 손가락을 반환하는 함수가 필요합니다. (현재 단계는 중요하지 않습니다.) 그러나이 함수는 내가 누르기 시작하거나, 손가락을 움직이거나 손가락을 뗄 때만 돌아옵니다. 버튼을 누르면 손가락이 제자리에 남아있을 때의 기능입니다.iPhone에서 멀티 터치 처리

touchesBegin, touchesMoved 및 touchesEnd를 사용하여 코드를 작성하려고했지만 한 함수는 다른 순서와 다른 순서로 손가락 목록을 반환하므로 모든 것을 스크류하고 멀티 터치가 불가능 해집니다.

이상적인 기능은 현재 화면에있는 모든 손가락을 반환 한 다음 모든 항목을 반복하여 위치가 일부 버튼의 위치와 일치하는지 확인한 다음 해당 버튼을 활성화 할 수 있습니다. 어떻게하면 될까요?

답변

0

기본적으로 터치 기반 GUI 기능을 구현하는 데는 복잡함이 따른다. 각 버튼의 상태를 추적하는 작은 상태 머신을 구현해야합니다. 예를 들어, 버튼은 "누르지 않은"상태에서 시작합니다. 버튼 내에서 터치가 감지되면 "누른"상태로 전환됩니다. 터치가 이동하거나 끝나거나 취소되면 버튼에 여전히 터치가 있는지 확인합니다. 그렇지 않으면 "누르지 않음"상태로 다시 전환됩니다. 게임 루프는 버튼의 상태를 확인하고 그에 따라 이벤트를 생성 할 수 있습니다 (예를 들어, 일부 버튼은 눌렀을 때 연속적으로 이벤트를 생성해야하고, 다른 버튼은 버튼을 놓을 때 단일 샷 이벤트를 생성해야 할 수도 있음).

+0

그러나 문제는 "버튼에 여전히 터치가 있는지 확인합니다"부분입니다. 어떻게해야합니까? 나는 그것에 대한 어떤 기능도 찾을 수 없었다. 터치 만 시작, 이동 또는 종료 할 때만 이벤트를 수신합니다. 사용자가 움직이지 않고 버튼을 누르고 있으면 눈치 채지 못할 것입니다. 그게 내가 원하는 위치에 접촉이 있는지 확인하는 것입니다. – HLorenzi

+0

버튼 안에 터치가있는 경우 (touchesBegan/Moved 콜의 결과로 감지 됨) 터치 이후 아무 것도 수신하지 못했습니다. 이동/종료/취소 : 터치가 없음을 나타내는 호출 버튼 안에. 터치 이벤트 사이의 현재 상태에 대해 단추를 쿼리 할 수 ​​있도록 버튼 당 하나의 추가 값 (아마도 isPressed라는 부울)을 저장해야합니다. 버튼 상태를 저장하면 터치 콜백에 의존하지 않는 지속적인 정보를 얻을 수 있습니다. – warrenm

+0

네, 모든 버튼마다 isPressed를 저장하고 있습니다. 그러나 문제는 멀티 터치 기능으로 인해 발생합니다. 내가 터치를했는지 여부를 추적 할 수 없습니다. 이동 한 이벤트가 일부 터치의 동일한 손가락 인 경우입니다. 예를 들어, 사용자가 화면에서 손가락을 움직이고 첫 번째 버튼을 누르지 않고 두 번째 버튼에서 멈췄는지 알 수있는 방법이 없습니다. -이 시나리오에서는 터치가 없었기 때문에이 시나리오에서는 이동 한 손가락이 첫 번째 버튼을 누른 것과 같은지 알 방법이 없습니다 (그래서 나는 그것을 풀 수 있습니다). 설명하기가 약간 어렵습니다 ... – HLorenzi