Tôi sẽ hối hận khi sử dụng hệ thống phát hiện va chạm dựa trên màu sắc?


7

Tôi mới bắt đầu xây dựng trò chơi đầu tiên của mình với XNA (Tôi có kinh nghiệm với C # nhưng không phải trò chơi).

Tôi đang xây dựng một game bắn súng 2d từ trên xuống khá đơn giản. Tôi đã đọc hướng dẫn này về việc sử dụng một hệ thống va chạm dựa trên màu sắc và nó nghe có vẻ rất tuyệt đối với tôi. http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

Điều đó có nghĩa là tôi có thể nhanh chóng tạo các cấp chỉ bằng cách sử dụng bất kỳ chương trình đồ họa nào và không phải xác định cảnh quan của mình (tường, cây, v.v.) về các hộp va chạm, v.v phải không?

Tuy nhiên tôi có thể thấy rằng đi xuống con đường này có nghĩa là có lẽ việc tính toán để xác định xem các vật thể chuyển động nhanh như đạn xuyên tường có trở nên khó khăn hơn hay không bởi vì bạn không thể thực hiện các phép cắt giao nhau hình học cơ bản.

Có đúng không? Tôi có hối hận khi đi theo hướng này nếu trò chơi của tôi trở nên phức tạp hơn theo thời gian? Có đáng để đầu tư vào việc tạo ra một trình soạn thảo cấp độ để xác định cảnh quan của tôi về mặt hình học?

Bất kỳ lời khuyên cho một noob rất nhiều đánh giá cao!

Câu trả lời:


6

Bạn đang chú ý đến những quan sát của mình về khả năng của phương pháp va chạm dựa trên bitmap.

Phương pháp này cung cấp một cách thực sự dễ dàng để chỉnh sửa cấp độ của bạn với bất kỳ chương trình nào có thể xuất ra một bitmap (bất kỳ chương trình chỉnh sửa hình ảnh nào). Hệ thống này cũng thực sự linh hoạt khi bạn muốn xác định các loại mặt đất khác nhau. Nói greencho bùn, và redcho một nền tảng vững chắc. Sau đó, bạn dễ dàng truy vấn pixel hiện tại và xác định loại ngầm mà người chơi đang đứng. Ngay cả các đường dốc (độ dốc từ mặt đất loại A đến B) là có thể mà không có nhiều vấn đề.

Vấn đề phát sinh với phát hiện va chạm. Thật dễ dàng để phát hiện giao lộ với một đối tượng khác (chỉ cần thực hiện kiểm tra pixel), nhưng thật khó (tốn kém về mặt tính toán) để tìm ra hướng mà đối tượng bạn va chạm có. Điều này đặc biệt quan trọng khi bạn cần một bề mặt bình thường để làm chệch hướng các đối tượng một cách chính xác .

Ngoài ra các đối tượng chuyển động thực sự nhanh có thể là một vấn đề, đặc biệt là nếu bạn có các đối tượng mỏng (ví dụ: rộng 1 pixel) để va chạm. Có câu hỏi này bao gồm chủ đề này rồi.

Cuối cùng, tất cả phụ thuộc vào loại trò chơi bạn muốn tạo và độ phân giải (về phát hiện / giải quyết va chạm) mà bạn cần. Cách tiếp cận dựa trên bitmap hoạt động tốt nhất, khi một phần lớn thế giới của bạn là tĩnh. Nhưng nó cũng cho phép bạn thực hiện những thứ như mức độ phá hủy khá dễ dàng.

Vì bạn không đề cập đến loại trò chơi mà bạn muốn tạo, giờ đây bạn phải quyết định liệu phương pháp va chạm dựa trên bitmap có mang lại lợi ích cho trò chơi của bạn hay không. Chúc may mắn.


Theo kinh nghiệm của tôi, vấn đề bình thường bề mặt là khá nhỏ so với việc xác định xung lực thực sự sau một tác động, trong một hệ thống phát hiện va chạm hoàn hảo pixel. Nói chung PPCD không được sử dụng cho các trò chơi đòi hỏi rằng loại mức độ chi tiết, tuy nhiên, có lẽ vì nó làm cho mọi thứ một rất nhiều khó khăn hơn so với vật lý vector-based, trong vấn đề này. Vấn đề khác tôi gặp phải với cách tiếp cận này là khả năng bị "mắc kẹt" khi bạn xoay nhân vật của mình ở những vị trí nhất định trong cấp độ của bạn. Box2D và những thứ tương tự xử lý việc này bằng cách đẩy các khối u ra xa nhau khi chúng ở quá gần.
Kỹ sư

cảm ơn rất nhiều! Tôi không có kế hoạch làm bất kỳ sự chệch hướng nào vì vậy tôi nghĩ điều đó ổn. Tôi không chắc phải làm gì với những viên đạn di chuyển nhanh có thể trượt qua các bức tường trong một khung hình duy nhất. Tìm hiểu xem họ có vượt qua một bức tường có vẻ ổn không, chỉ cần lấy một mẫu hình ảnh bản đồ trong một hình chữ nhật dài mỏng đó là đường đạn và tìm kiếm các pixel màu tường. Nhưng việc tìm ra pixel tường đầu tiên mà nó có thể đạt được có vẻ khó hơn một chút. Tôi nghĩ rằng khi viên đạn bắn ra đầu tiên tôi sẽ chiếu tia và lấy một số pixel mẫu trong khoảng thời gian ngắn dọc theo tia tìm kiếm pixel tường đầu tiên và đánh dấu đó là điểm va chạm?
TerryB

2
@TerryB: Tôi nghĩ rằng thuật toán dòng Bresenham sẽ hoạt động tốt ở đây. Vẽ đường cho đến khi bạn chạm vào pixel pixel và đó sẽ là điểm va chạm của bạn.
bummzack
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.