2012-05-13 81 views
9

Tôi đang phát triển game bắn súng người đầu tiên trong Java và tôi muốn thực hiện các điều khiển trong đó chuyển động của chuột sẽ xoay người chơi. Tuy nhiên, trong Java, tôi chỉ có thể nhận tọa độ chuột bằng cách sử dụng các sự kiện MouseListener, do đó tọa độ sẽ ngừng thay đổi khi con trỏ chuột rời khỏi cạnh màn hình và tôi sẽ không thể biến chế độ xem của người chơi.Vị trí chuột trong java

Bất kỳ mẹo/đề xuất nào về cách thực hiện điều đó? Cảm ơn.

+0

.. nhưng bạn cũng sẽ biết rằng chuột _isn't_ di chuyển, phải không? – sarnold

+0

@ sarnold: Tôi nghĩ vấn đề là chuột * vẫn có thể di chuyển nhưng con trỏ * không phải. –

+0

@GregHewgill: chính xác! – user1391664

Trả lời

3

Trong một số trò chơi, trên mỗi sự kiện di chuyển chuột, con trỏ được di chuyển trở lại giữa màn hình và chế độ xem di chuyển với độ lớn và hướng tương ứng của sự kiện chuột. Bạn có thể lấy vector đó bằng cách tính toán độ lệch của vị trí con trỏ tới giữa màn hình trước khi căn giữa con trỏ. Để di chuyển con trỏ trở lại giữa màn hình, bạn có thể thử sử dụng lớp java.awt.Robot.

Vì bạn đang xây dựng một game bắn súng người đầu tiên, có thể bạn sẽ muốn ẩn con trỏ bị khóa ở giữa và vẽ hình chữ thập của riêng bạn nơi người chơi đang có ý định nhắm đến. Điều đó cũng sẽ liên quan đến việc theo dõi vị trí con trỏ nên dựa trên tổng số hoạt động của các sự kiện di chuyển chuột trước đó.

Nếu bạn muốn đạt được hành vi trong đó chế độ xem sẽ tiếp tục di chuyển liên quan đến vị trí bắt đầu của chuột (ngay cả khi con chuột đã ngừng di chuyển), bạn có thể giữ tổng di chuyển của tất cả các vector di chuyển chuột trước đó và di chuyển chế độ xem tương ứng một lần mỗi khung hình. Tuy nhiên, điều này có thể áp dụng nhiều hơn cho một cái gì đó giống như một mô phỏng chuyến bay hơn là một game bắn súng người đầu tiên.

+0

Nó chỉ như vậy xảy ra, tôi đã làm điều tương tự chính xác trong khi chờ đợi một câu trả lời. Tôi không biết trò chơi thực sự đã làm theo cách đó. Cảm ơn – user1391664

+0

Công cụ tuyệt vời, bạn được chào đón! Điều này thường được gọi là khóa chuột/con trỏ/con trỏ. – AerandiR

3

Tôi đã thử sử dụng java.awt.Robot như AerandiR đề xuất, nhưng có một số vấn đề tôi gặp phải và có thể những người khác cũng sẽ gặp phải vấn đề đó, vì vậy tôi sẽ giải thích.

Nếu mục tiêu của bạn là giữ con trỏ ở một vị trí (tốt nhất là giữa màn hình), thì bạn sẽ muốn gọi một cái gì đó như robot.mouseMove(width/2, height/2); ở cuối phương thức mouseMoved() của bạn. Với việc thực hiện này, mỗi khi chuột được di chuyển ra khỏi trung tâm, các Robot sẽ di chuyển nó trở lại trung tâm.

Tuy nhiên, khi Robot căn giữa chuột, trình phát sẽ quay lại vị trí của nó. Trong thực tế, người chơi sẽ nói lắp giữa vị trí ban đầu và vị trí quay.

Để khắc phục điều này, thay vì xác định khoảng cách người chơi của bạn bật sự khác biệt giữa vị trí của con chuột và vị trí của nó, hãy xác định nó là khoảng cách từ trung tâm.

Giống như vậy: turnAmountX += e.getX() - width/2;

Bây giờ, nếu Robot tái trung tâm chuột, e.getX() - width/2 sẽ luôn mang lại không.

Tóm tắt:

void mouseMoved(MouseEvent e) { 
     turnAmountX += e.getX() - width/2; 
     turnAmountY += e.getY() - height/2; 
     robot.mouseMove(this.getLocationOnScreen().x + width/2, 
      this.getLocationOnScreen().y + height/2; 
    } 
+0

Cảm ơn bạn! Đây là thông tin bổ sung mà tôi cần và không thể tìm thấy ở bất cứ đâu .. Genius. – LucidObscurity

Các vấn đề liên quan