2015-05-12 20 views
7

Tôi đang làm việc trên một trò chơi 2D đơn giản với Java, swing và không có khung. Tôi có một trình phát hình chữ nhật mà người dùng có thể di chuyển. Trên bản đồ là vài chướng ngại vật mà người chơi không thể vượt qua được. Tôi đã làm điều này bằng cách tạo một đối tượng hình chữ nhật mới cho người chơi và mỗi chướng ngại vật với giới hạn của họ. Nhưng tôi không thực sự chắc chắn nếu đây là cách đúng đắn để làm điều đó. Nó hoạt động nhưng các chuyển động của người chơi không thực sự thân thiện với người dùng. Nếu người chơi muốn vượt qua hai chướng ngại vật họ phải ở trên tọa độ hoàn hảo để vượt qua.Phát hiện Hitbox trò chơi Java & Góc tròn

Thậm chí có nên kiểm tra giao lộ giữa người chơi và vật cản với vật thể hình chữ nhật hay tôi nên làm theo cách khác?

Bây giờ cho câu hỏi thứ 2 của tôi:
Tôi muốn thay thế hộp đánh dấu hình chữ nhật bằng cùng một hộp kiểm nhưng với góc tròn để người chơi có thể vượt qua dễ dàng hơn.

My game with hitboxes enabled
Đây là trò chơi trông giống như đã kích hoạt hộp hit.

Mã để kiểm tra nếu các cầu thủ và những trở ngại vẫn chưa giao nhau:

for (Player p : this.getPlayerArray()) { 
    Rectangle recPlayer = p.playerBounds(); 
     for (Obstacle kiste : obstacleArray) { 
      Rectangle recKiste = kiste.obstBounds(); 

      if (recPlayer.intersects(recKiste)) { 
       p.setX(100); //Not actual code here 
      } 
     } 
} 

Các hàm trả về hitbox của máy nghe nhạc/trở ngại:

public Rectangle obstBounds() { 
    return new Rectangle(this.getX(), 
    this.getY(), image.getImage().getWidth(null), 
    image.getImage().getHeight(null)); 
} 
+0

Tôi nghĩ bạn có thể làm cho vụ va chạm dựa trên hệ thống giống như bản đồ gạch. – GiantTree

+1

@GiantTree Thats cách tôi tạo bản đồ. Nhưng đó là tất cả tự mã hóa. Có sự khác biệt với phát hiện bản đồ ngói không? – Aruloci

+0

Chỉ để làm rõ: Bạn đang di chuyển trên bản đồ lát gạch hay có chuyển động tự do. Nếu người chơi của bạn đang di chuyển trên một bản đồ lát gạch, bạn chỉ có thể kiểm tra xem ô mà bạn muốn di chuyển là có thể thực hiện được hay không và di chuyển tương ứng. – GiantTree

Trả lời

0

Cách đây nhiều năm, tôi đã viết một mô phỏng Khepera như là một phần của dự án năm cuối cùng của các sinh viên. Tôi bắt đầu bằng cách phát hiện va chạm như bạn đang làm, đó là các khu vực giao nhau ... Người giám sát của tôi khiến tôi nhận thấy rằng vì hình dạng robot của tôi là một vòng tròn, tôi chỉ có thể kiểm tra xem trung tâm của robot có ở trong hình dạng khác không, là trường hợp xảy ra va chạm.

Trường hợp của bạn thậm chí còn đơn giản hơn khi bạn di chuyển trên các ô ... do đó bạn làm (như được đề xuất trong nhận xét) duy trì một bộ "di chuyển/không di chuyển" và kiểm tra, hoặc bạn chỉ kiểm tra vị trí người chơi của bạn ở trong, hay không, một hình chữ nhật 'cấm', tức là một chướng ngại vật. Nếu có, thì bạn phải đặt lại vị trí của ký tự là 'bên ngoài' của chướng ngại vật (trừ hộp giới hạn của ký tự, hiển nhiên)

Tôi khuyên bạn nên làm theo cách gạch: chỉ cho phép lên/xuống/trái/phải di chuyển và kiểm tra chống lại một 'cấm' của các phong trào cho một vị trí ngói.Nếu bạn thực sự muốn 'tự do' chuyển động hơn là đi vòng tròn (bao quanh hộp/vòng tròn) bởi vì chúng dễ dàng lý luận, dễ dàng đặt lại vị trí (trong trường hợp va chạm) và hoàn hảo cho trường hợp của bạn (mỗi ô có thể chứa vòng tròn, dù là vật cản hay người chơi.)

0

Có rất nhiều cách để đi về kiểm tra va chạm, nhưng tôi nghĩ rằng một cách tiếp cận đơn giản sẽ làm tốt cho trường hợp sử dụng của bạn.

Đầu tiên từ giao diện của ảnh chụp màn hình của bạn, một ô hoặc là một chướng ngại vật hoặc có thể vượt qua, nhưng không bao giờ là một nửa. Trong trường hợp đó, đơn giản nhất là bạn chỉ cần kiểm tra xem hình xếp nào là hình vuông (hoặc bàn chân, chọn những gì trông đẹp nhất) của nhân vật.

Nếu trở ngại của nó, họ có thể t đến đó, đơn giản như vậy. Lưu ý rằng điều này sẽ cho phép người chơi di chuyển một phần thành một trở ngại, nhưng nhiều trò chơi thực hiện theo cách này và người chơi chắc chắn đã quen với hành vi này, đặc biệt là trong trò chơi 2D với đồ họa được thiết kế trông giống như một phép chiếu isometric. lớp như). Một biến thể của điều này sẽ đơn giản là làm cho hình chữ nhật va chạm của người chơi nhỏ hơn (nói một nửa một lát, một lần nữa tập trung vào đầu phát của người chơi là lồng ngực hoặc bàn chân).

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