Tôi đã gặp sự cố với công cụ Mega Man của mình và cấu trúc của vòng lặp trò chơi của tôi đang khiến việc khắc phục rất khó khăn. Với Rush Jet, hoặc bất kỳ nền tảng rơi nào, Mega Man cần phải gắn bó với nền tảng khi nó rơi. Ngay bây giờ, điều tốt nhất tôi có thể làm (mà không cần dùng đến cách giải quyết như các trường lực ma thuật kéo anh ta xuống) để anh ta rơi vào một khung hình duy nhất khi nền tảng bắt đầu rơi xuống. Nhưng ngay cả điều này đòi hỏi nền tảng rơi xuống để kéo anh ta xuống trong quá trình kiểm tra va chạm. Không có thêm bước này, anh liên tục "hốt hoảng" khi ngã xuống khi nền tảng hạ xuống.
Thứ tự của các sự kiện trong vòng lặp trò chơi của tôi đang làm cho điều này xảy ra. Nó như thế này:
- Mega Man và Rush Jet đang bay theo chiều ngang trong một thời gian.
- Giai đoạn suy nghĩ: Người chơi nhấn xuống - nền tảng quyết định đặt vận tốc của nó xuống dưới.
- Giai đoạn hành động: Nền tảng di chuyển xuống, người chơi không có nhận thức về điều này.
- Giai đoạn phản ứng: Cả hai không va chạm, do đó không thể kiểm tra "lực liên kết".
- Khung tiếp theo, Mega Man rơi xuống. Một khung hình sau đó, trọng lực bắt kịp và anh ta đáp xuống nền tảng một lần nữa, đặt lại vận tốc y của anh ta về 0.
Bạn có thể thấy ở đó thứ tự cơ bản của vòng lặp của tôi:
- Giai đoạn suy nghĩ, nơi bạn phân tích các va chạm từ khung trước đó và bất kỳ biến nào khác, để quyết định chuyển đổi trạng thái và các điều chỉnh khác.
- Pha hành động - mọi người di chuyển theo vận tốc của họ.
- Giai đoạn phản ứng - kiểm tra va chạm, điều chỉnh vị trí để khắc phục chúng. Điều này cũng xử lý các hiệu ứng như di chuyển nền tảng, ví dụ. đẩy người chơi bằng một số tiền. Những thay đổi về vận tốc của anh ta được áp dụng trong khung tiếp theo, trong giai đoạn hành động.
Tôi đã thử sắp xếp lại các bước này và nhiều thay đổi khác, nhưng tất cả đều làm cho mọi thứ trở nên tồi tệ hơn nhiều, với đủ loại lỗi. Nếu tôi cần thực hiện các thay đổi sâu rộng cho động cơ của mình để có được những điều này đúng, tôi muốn biết cách "phù hợp" là gì trước khi lãng phí bất cứ lúc nào.
Tôi biết một giải pháp khả thi sẽ là bước chuyển động để xem ai đang chạm vào nền tảng trong khung trước đó và kéo anh ta sau đó, để họ thực sự di chuyển cùng nhau. Điều đó dường như quá phức tạp, đạt được giữa các thành phần như thế. Mã công cụ của tôi đã cảm thấy phức tạp hơn nhiều so với trò chơi gốc có thể có, cho thấy tôi đang làm gì đó sai.
Vì vậy, có một chuỗi các sự kiện thích hợp? Có một câu hỏi khác ở đây về việc di chuyển mọi thứ cùng với một nền tảng, nhưng điều đó không giải quyết được thứ tự của sự kiện gây ra vấn đề của tôi. Ngoài ra, nếu bất cứ ai thực sự biết cách các trò chơi Mega Man cổ điển đã làm điều đó, rõ ràng đó sẽ là một trợ giúp rất lớn.
Tìm bao nhiêu mã của tôi như bạn muốn tại https://github.com/Tesserex/C--MegaMan-Engine/tree/master/Mega%20Man . CollisionComponent và MovementComponent có thể hữu ích nhất.