2013-06-01 2 views
7

나는 Libgdx를 사용하여 경주 용 게임을 만들고 있습니다. 화면의 반쪽을 터치하여 속도를 높이고 동시에 이전 터치 포인트를 제거하지 않고 화면의 왼쪽에서 다시 한 번 터치하여 총을 발사합니다. 나중에 터치 포인트를 감지 할 수 없습니다.Libgdx에서 여러 터치 이벤트를 추적하는 방법은 무엇입니까?

나는 검색하여 Gdx.input.isTouched(int index) 방법을 얻었지만 그것을 사용하는 방법을 결정할 수 없습니다. 내 화면 터치 코드는 다음과 같습니다.

if(Gdx.input.isTouched(0) && world.heroCar.state != HeroCar.HERO_STATE_HIT){ 
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
    if (OverlapTester.pointInRectangle(rightScreenBounds, touchPoint.x, touchPoint.y)) { 
     world.heroCar.state = HeroCar.HERO_STATE_FASTRUN; 
     world.heroCar.velocity.y = HeroCar.HERO_STATE_FASTRUN_VELOCITY; 
    } 
} else { 
    world.heroCar.velocity.y = HeroCar.HERO_RUN_VELOCITY; 
} 

if (Gdx.input.isTouched(1)) { 
    guiCam.unproject(touchPoint.set(Gdx.input.getX(), Gdx.input.getY(), 0)); 
    if (OverlapTester.pointInRectangle(leftScreenBounds, touchPoint.x, touchPoint.y)) { 
     world.shot(); 
    } 
} 

답변

12

Gdx.input.getX(int index) 메서드를 사용하고 싶습니다. 정수 index 매개 변수는 활성 포인터의 ID를 나타냅니다. 올바르게 사용하려면 가능한 모든 포인터를 반복하고 싶을 것입니다 (두 사람이 태블릿에 손가락이 20 개인 경우를 대비하여). 이 같은

뭔가 :

boolean fire = false; 
boolean fast = false; 
final int fireAreaMax = 120; // This should be scaled to the size of the screen? 
final int fastAreaMin = Gdx.graphics.getWidth() - 120; 
for (int i = 0; i < 20; i++) { // 20 is max number of touch points 
    if (Gdx.input.isTouched(i)) { 
     final int iX = Gdx.input.getX(i); 
     fire = fire || (iX < fireAreaMax); // Touch coordinates are in screen space 
     fast = fast || (iX > fastAreaMin); 
    } 
} 

if (fast) { 
    // speed things up 
} else { 
    // slow things down 
} 

if (fire) { 
    // Fire! 
} 

다른 방법은 (대신에 "폴링"위의 예와 같은 입력의) 입력 이벤트를 얻기 위해 설정 InputProcessor이다. 포인터가 영역 중 하나에 들어가면 포인터의 상태를 추적해야합니다 (왼쪽에있는 경우 지울 수 있도록).

+0

안녕하세요, 답장을 보내 주셔서 감사합니다. 내가 당신의 코드를 사용했을 때 나는 스크린을 터치하거나 쏘지 만 총을 쏘기를 원한다. –

+4

아, 아마 코드는'getX (i)'를 호출하기 전에'Gdx.input.isTouched (i)'를 체크해야할까요? (아마도 사용되지 않는 터치 포인트는 X가 0 일 것입니다.). 코드를 업데이트하겠습니다. –

+1

헤이 작동, 고마워. –