Làm thế nào để tạo một phát hiện va chạm trò chơi 2D nhập vai thực tế?


9

Tôi đã luôn muốn tạo ra một trò chơi nhập vai 2D lỗi thời như Star Ocean, Final Fantasy, Sword of Mana và thậm chí là loạt game Tales Tales of, và tôi đoán rất nhiều người làm. Nhưng trước khi viết một dòng mã, tôi đã nghiên cứu, vẽ và thử.

Tôi đã tìm thấy gần như tất cả các câu trả lời cho câu hỏi của mình nhưng có một vấn đề tôi chưa thể giải quyết: Làm thế nào để bạn tạo ra một phát hiện va chạm thực tế nhưng đơn giản , như trong các trò chơi tôi đặt tên trước đây?

Tôi đã biết một số cách tính toán phát hiện va chạm, hãy xem các ví dụ sau:

Ví dụ phát hiện va chạm

Không ai trong số này đáp ứng nhu cầu của tôi.

  • Các va chạm dựa trên gạch quá đơn giản và phù hợp với Zelda hơn Star Ocean. Thêm vào đó, bản vẽ của mỗi ô cần lấp đầy tất cả không gian để trông thật.
  • Pixel-perfect có quá nhiều ràng buộc. Nếu ô của bạn có một số pixel ở đây và ở đó, người chơi rất có thể sẽ bị kẹt ở giữa hư không (nghĩa là: trong một số trò chơi, bạn bị kẹt trên gốc cây có chiều rộng 2 pixel).
  • Và mặt nạ nhị phân sử dụng quá nhiều bộ nhớ và cài đặt imo.

Tôi đã đọc rất nhiều tài liệu nhưng tôi chưa bao giờ tìm thấy thứ gì đó phù hợp với mình. Và tất cả các lần thử của tôi không giống với những gì tôi từng chơi. Vì vậy, nếu bạn có bất kỳ liên kết hoặc hướng dẫn tốt nào về cách phát triển 2D RPG hoạt động, vui lòng cho tôi biết.


2
Môi trường nào bạn đang phát triển cho mặt nạ va chạm đó chiếm quá nhiều bộ nhớ? Điều đó thực sự không phải là mối quan tâm đối với hầu hết các hệ thống hiện đại và mặt nạ va chạm thực sự phát ra âm thanh giống như những gì bạn đang tìm kiếm.
Gregory Avery-Weir

Tôi đang phát triển trên PC hầu hết thời gian với XNA, nhưng gần đây tôi đã nghĩ đến việc bắt đầu một dự án trên WP7. Vấn đề tôi gặp phải với mặt nạ va chạm là việc sử dụng độ phân giải nhỏ, nó hoạt động chính xác như pixel hoàn hảo sẽ làm, bằng cách làm cho nhân vật của tôi bị mắc kẹt trong một góc chẳng hạn. Vì vậy, trừ khi bạn sử dụng đường cong Bézier để chuyển động trơn tru, bạn cần hết sức cẩn thận với cách bạn tạo mặt nạ.
Aymeric

Câu trả lời:


9

Hướng dẫn N có thể giúp đỡ ở đây. Phải thừa nhận rằng, chúng dành cho một nền tảng kiểu arcade, nhưng chúng sẽ hoạt động tốt như một game nhập vai nhìn từ trên xuống; chỉ không áp dụng trọng lực. Tiền đề là thử nghiệm va chạm trong một tập hợp các hình dạng cơ bản - hình tròn, hộp giới hạn theo trục, đường thẳng, điểm, vân vân.

Sau đó, bạn bằng cách nào đó trang trí thế giới của mình bằng những thứ này (có thể thông qua trình chỉnh sửa mức tùy chỉnh) hoặc tự động tạo chúng (vừa với hộp hoặc vòng tròn gần nhất) - hoặc cả hai (mặc định là hộp / vòng tròn được tạo tự động và cho phép nhà thiết kế điều chỉnh) .

Nơi tôi làm việc, chúng tôi đã thực hiện khá nhiều platformer và một số game khám phá từ trên xuống. Chúng tôi đã làm chúng từ những ngày GBA. Chúng tôi thường sử dụng AABB cho các ký tự và đối tượng, có thể điều chỉnh trong trình soạn thảo sprite - và chúng tôi phát điên ở đây, cho phép một tấn hộp cho mỗi sprite, một số với các mục đích khác nhau. Chúng ta có thể có:

  • một hoặc nhiều hộp va chạm, mô tả hình dạng của vật thể để chạy vào vật;
  • có thể nhiều "hộp tấn công" chỉ xuất hiện khi bạn đang ở giữa một cuộc tấn công (và hoạt hình với sprite), thậm chí có thể hai hoặc ba mỗi vũ khí, tùy thuộc;
  • một vài "hộp dễ bị tổn thương" sẽ gây sát thương khi bị tấn công bởi các hộp tấn công của người khác - theo mặc định, chúng tôi sử dụng hộp va chạm, nhưng các hộp dễ bị tổn thương có xu hướng cảm thấy tốt hơn khi chúng nhỏ hơn hộp va chạm và chúng tôi có thể cho phép cho thiệt hại nhận biết vị trí theo cách này
  • một hoặc nhiều "hộp kích hoạt" trên AI mô tả vùng cảm giác cho AI - chẳng hạn, chúng sẽ tấn công nếu người chơi ở khu vực này chẳng hạn.

Các cấp chủ yếu là chuỗi các phân đoạn dòng; chúng tôi có một chút siêu dữ liệu trên mỗi phân đoạn để mô tả các bề mặt bị hư hại hoặc trơn trượt, v.v.

Vì vậy, hầu hết các phát hiện và phản ứng va chạm trở thành AABB-vs-AABB hoặc AABB-vs-Segment. Thỉnh thoảng chúng tôi ném một vòng tròn so với thứ gì đó cho một viên đạn, mặc dù thường thì AABB cũng sẽ làm ở đây.

Bạn không cần nhiều hình dạng cơ bản để làm cho mọi thứ trở nên đẹp và hoạt động tốt - một số sẽ làm được, miễn là bạn có thể điều chỉnh và lặp lại trên chúng.


Ngoài ra, đừng cảm thấy tồi tệ về việc trộn các hệ thống lại với nhau; va chạm dựa trên gạch có thể là tuyệt vời trong một số lĩnh vực (đại diện cho phần lớn thế giới của bạn) nhưng thật kinh khủng cho các tương tác đối tượng-đối tượng. Tốt rồi; sử dụng một hệ thống khác cho đối tượng vs đối tượng! Viết cho các tương tác giữa hai hệ thống có thể dễ dàng hơn bạn nghĩ.

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.