Nền tảng và Vật lý
Những trường hợp cạnh rất nhiều. Những người chơi platformer vui vẻ không hành xử theo bất kỳ cách chính xác nào về mặt vật lý, và sự kiểm soát cũng như hành vi mà người chơi mong đợi sau nhiều năm của những người chơi platformer "hoàn hảo" như Mario rất khó thực hiện với các kỹ thuật chung như bạn có với Box2D hoặc các động cơ vật lý khác. Hầu hết các nền tảng tốt không sử dụng bất kỳ loại vật lý chung hoặc phản ứng va chạm nào trong bộ điều khiển trình phát của họ.
Tạo thân tàu
Liên quan đến câu hỏi cụ thể của bạn, giải pháp tốt nhất là ngừng sử dụng các hộp làm mặt bằng của bạn. Sử dụng một loạt các đoạn đường được kết nối (một thân tàu). Điều đó cho phép động cơ phát hiện va chạm chỉ tập trung vào các bề mặt thực sự có thể đi bộ và không nhìn vào cạnh "giả" tồn tại giữa AB và BC. Đó là những gì Box2D làm, trên thực tế. Các hình dạng được sử dụng để tạo ra các bề mặt bên ngoài, được liên kết với nhau để tạo thành một thân tàu.
Bạn cần điều này ngay cả trong các trò chơi xếp gạch, hoặc trong các tình huống mà bạn có hai đối tượng AABB bên cạnh hoạt động khác như sàn. Động cơ va chạm sẽ nhặt những cạnh thẳng đứng đó và khiến người chơi bắt chúng. Có những hack có thể giúp đỡ, nhưng không loại bỏ vấn đề. Giải pháp là chỉ có một phân đoạn dòng duy nhất đại diện cho bề mặt chứ không phải là một hộp 2D đầy đủ.
Bạn có thể tạo các thân tàu trong trường hợp chung bằng cách cắt các đa giác với nhau và nối các điểm clip vào một danh sách cạnh.
Bề mặt dốc
Vì ví dụ của bạn bao gồm độ dốc và bạn đang đề cập đến sự phục hồi và các thuộc tính vật lý khác, tôi sẽ chỉ ra một vài vấn đề khác mà bạn sẽ sớm nhận thấy, điều này minh họa thêm tại sao phát hiện và phản ứng va chạm chung không hoạt động tốt cho các nền tảng. Đầu tiên, hãy thử đứng trên bục góc, nhảy lên, và sau đó hạ cánh. Bạn có thể sẽ nhận thấy rằng nhân vật sẽ "trượt" một chút khi hạ cánh. Vấn đề là liên hệ bình thường mà bạn tạo ra thường sẽ được chỉ ra từ bề mặt góc cạnh. Sau đó, khi giải quyết va chạm, người chơi bị đẩy ra theo hướng đó. Mặc dù nhân vật rơi thẳng xuống, anh ta sẽ bị đẩy lên và một chút về bên phải khi hạ cánh, dẫn đến trượt. Điều này có thể bị hack bằng cách tính đến vận tốc tương đối,
Vấn đề thứ hai bạn sẽ chú ý, khó khắc phục hơn nhiều, đó là những gì xảy ra khi bạn cố gắng chạy nhanh xuống một đoạn đường dốc. Người chơi sẽ "nhảy" xuống đoạn đường nối. Điều này rất dễ thấy ngay cả trong hầu hết các game AAA hiện nay. Nó không chỉ trông ngớ ngẩn, mà nếu trò chơi của bạn yêu cầu người chơi phải đứng trên mặt đất để nhảy, điều đó gây khó khăn khi chạy xuống một đoạn dốc và nhảy xuống một nửa, bởi vì người chơi chỉ tiếp xúc với đoạn đường nối trong một phần nhỏ của thời gian đi xuống nó Cách khắc phục đơn giản hơn là chỉ cần thực hiện một số động tác phát tia khi người chơi di chuyển và đưa vị trí người chơi xuống bề mặt gần nhất (nếu nó rất gần với người chơi) nếu người chơi không nhảy và trước đó đã ở trên mặt đất.
Bạn cũng có thể thấy rằng người chơi phóng lên không trung khi chạy lên đoạn đường dốc nếu bạn cố gắng mô hình vận tốc, ma sát và phục hồi trên người chơi như thể anh ta là một cơ thể cứng nhắc bình thường. Chuyển động của người chơi nên bị hạn chế chuyển động ngang trừ khi ngã / nhảy. Tất nhiên, nếu bạn chơi platformer thời kỳ hoàng kim cũ hơn, bạn có thể nhận thấy rằng vận tốc ngang của người chơi thường không đổi giữa các bề mặt ngang và dốc. Điều này cần phải được tính đến khi đi lên / xuống dốc.
Sẽ có một số trường hợp góc kỳ lạ khác cuối cùng bạn cũng sẽ gặp phải. Nếu bạn đang cố gắng tạo ra một nền tảng tốt, tốt nhất là thực hiện bộ điều khiển trình phát nền tảng tách biệt với vật lý và mã hóa hành vi điều khiển và chuyển động mà bạn muốn, thay vì dựa vào thuật toán vật lý chung và phản ứng va chạm.