Làm cách nào để xử lý phát hiện va chạm Isometric?


14

Tôi muốn làm một platformer kiểu run-jump isometric. Người chơi sẽ có thể nhảy lên trên các nền tảng phía trên sàn nhà, chạm vào các vật thể, v.v.

Tôi sẽ sử dụng công cụ trò chơi 2D vì vậy tôi không muốn mô phỏng xung đột 3D đầy đủ cho các kích thước tôi không sử dụng.

Tôi nghĩ các đối tượng trong trò chơi nên được đặt bằng cách sử dụng: X, Y, chiều rộng, chiều cao và Z cho chiều sâu.

Sử dụng các giá trị đó, tôi nên phát hiện va chạm như thế nào?


Tôi biết đây là một loại câu hỏi chung nhưng, tôi muốn câu trả lời chi tiết hơn hoặc liên kết đến các tài nguyên học tập tốt.
jdeseno

Câu trả lời:


19

2 lựa chọn:

  • Bạn có thể coi nó như một trò chơi 3D với một máy ảnh chỉnh hình cố định. Sau đó, bạn có thể sử dụng bất kỳ tài nguyên / sách / hướng dẫn / thư viện trò chơi 3D tiêu chuẩn nào. Ngay cả khi nó được hiển thị ở dạng 2D với các họa tiết, toán học cho chuyển động, v.v. vẫn sẽ là 3D phía sau hậu trường. Điều này sẽ cung cấp cho bạn kết quả chính xác nhất.

  • Bạn có thể coi nó như một trò chơi 2D từ trên xuống, với thuộc tính chiều cao được thêm vào. Ví dụ, hãy tưởng tượng một lưới 2D trong đó mỗi ô có giá trị chiều cao. Khi di chuyển từ ô này sang ô khác, bạn chỉ để một nhân vật chuyển sang một ô cụ thể nếu chân của nhân vật cao hơn hoặc bằng chiều cao của ô đó, nhưng nếu họ đang nhảy và lực hấp dẫn sẽ đưa họ xuống trên một ô, bạn hãy để họ ở lại đó Với một chút công việc bạn có thể làm cho nó để bạn có thể đi bộ dưới những cây cầu, vv


4

Có rất nhiều cách bạn có thể đơn giản hóa việc này. Ví dụ: nếu bạn không cho phép các lớp (ví dụ: cây cầu bạn có thể đi qua và đi xuống, bạn có thể thực hiện tất cả các va chạm phát hiện theo kích thước X / Y, trong đó bạn lọc va chạm được đặt thành bất kỳ chiều cao + độ sâu nào của nó hoặc cao hơn.


2

Nếu trò chơi dựa trên lưới hình chữ nhật, thì lưới này xác định trục X / Y của bạn. Và Z có thể được sử dụng cho chiều cao.

Các va chạm sau đó dễ dàng hơn hoặc ít hơn bất kỳ trò chơi dựa trên gạch 2D nào.

Sau đó, bạn chỉ cần chuyển đổi từ lưới trở lại tọa độ màn hình đẳng cự để hiển thị. Điều này khá đơn giản - nhưng bạn có thể cần suy nghĩ về việc tính toán các giá trị 'độ sâu', cho mục đích sắp xếp (hiển thị cảnh đẳng cự từ sau ra trước)


Sử dụng Z cho chiều cao đi ngược lại với bản năng, nhưng đó là điều nên làm trên các trò chơi 2D từ trên xuống. sau đó bạn có thể sử dụng lại mã giữa các trò chơi phụ và từ trên xuống.
Iain

2

Googling xung quanh tôi tìm thấy bản demo này: http://planetskill.com/iso/

WASD để di chuyển. Thanh không gian để nhảy

Nó chỉ thực hiện va chạm với trục lên / xuống nhưng thêm các va chạm khác nên dễ dàng:

Nếu vị trí lên / xuống của bước tiếp theo cao hơn mức tối đa của bạn thì đừng di chuyển. Điều này cũng sẽ cho phép bạn thực hiện nhảy một cách dễ dàng.

Mã mẫu tại đây: http://gist.github.com/478997


2

Tất cả những điều trên. Isometric chỉ là một lưới 2d bị cắt, vì vậy hãy coi nó như một bản đồ 2d và nghĩ cách mã hóa độ sâu. Bạn sẽ làm điều đó như thế nào trong một trò chơi 2d thông thường (có thể đi phía sau hoặc phía trước các khối khi 'nhảy'? Bạn sẽ lưu trữ độ sâu trên mỗi ô (bộ đệm sâu-> bộ đệm z) hoặc bạn sẽ sử dụng nhiều lớp .


Câu trả lời hay Kaj - đây là mấu chốt của vấn đề, tôi ngạc nhiên không ai khác đưa nó lên. Đây luôn là điều gây nhầm lẫn cho người mới về isometry, liên quan đến vật lý.
Kỹ sư

1

Chà, bạn có thể có một lớp va chạm riêng biệt ở trên mức không thể nhìn thấy và sử dụng lớp đó để kiểm tra va chạm .. Bạn cũng có thể sử dụng lớp này cho nhiều lớp miễn là bạn biết người chơi đang ở lớp nào;)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.