2013-06-01 18 views
7

Tôi đang tạo trò chơi đua xe bằng Libgdx. Tôi muốn chạm vào nửa bên phải của màn hình để tăng tốc, đồng thời không xóa lần chạm trước đó chạm vào một điểm khác ở phía bên trái màn hình để bắn. Tôi không thể phát hiện các điểm tiếp xúc sau này.Làm thế nào để theo dõi nhiều sự kiện cảm ứng trong Libgdx?

Tôi đã tìm kiếm và nhận phương thức Gdx.input.isTouched(int index) nhưng không thể xác định cách sử dụng. Mã chạm màn hình của tôi là:

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(); 
    } 
} 

Trả lời

12

Bạn sẽ muốn sử dụng phương pháp Gdx.input.getX(int index). Tham số index số nguyên đại diện cho ID của một con trỏ đang hoạt động. Để sử dụng đúng cách này, bạn sẽ muốn lặp qua tất cả các con trỏ có thể (trong trường hợp hai người có 20 ngón tay trên máy tính bảng?).

Something như thế này:

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! 
} 

Một phương pháp khác là để thiết lập một InputProcessor nhận sự kiện đầu vào (thay vì "bỏ phiếu" đầu vào như ví dụ trên). Và khi một con trỏ vào một trong các vùng, bạn sẽ phải theo dõi trạng thái của con trỏ đó (để bạn có thể xóa nó nếu nó còn lại).

+0

Xin chào, cảm ơn bạn đã trả lời. Khi tôi sử dụng mã của bạn lửa của nó bắn hoặc tôi chạm vào màn hình hay không nhưng tôi muốn bắn bắn chỉ khi màn hình cảm ứng. –

+4

Ah, có lẽ mã nên kiểm tra 'Gdx.input.isTouched (i)' trước khi gọi 'getX (i)'? (Có lẽ các điểm tiếp xúc không sử dụng có X bằng 0 ...). Tôi sẽ cập nhật mã. –

+1

Xin chào, cảm ơn. –