Làm cách nào để xử lý các nền tảng di chuyển trong trò chơi nền tảng?


15

Tôi không muốn sử dụng box2d hoặc bất cứ điều gì, tôi chỉ muốn các nền tảng di chuyển đơn giản (đường lên xuống, trái phải, đường chéo và đường tròn). Câu hỏi của tôi là xử lý hệ thống phân cấp thứ tự / kiểm soát cập nhật để người chơi cố định với nền tảng một cách vững chắc, mà không bị nảy hay chao đảo?

Câu trả lời:


16

Giải pháp của tôi sẽ là coi mọi thực thể vật lý trong bản đồ trò chơi là một nút cây và chính bản đồ là nút gốc . Các nút có thể chứa các nút khác. Mỗi nút được chứa (trực tiếp hoặc gián tiếp) bên trong nút bản đồ.

Ví dụ: giả sử nhân vật của bạn đang đứng trên một nền tảng. Nút của nền tảng chứa nút của nhân vật. Vì vậy, bất cứ khi nào nền tảng di chuyển, các nút mà nó chứa (trong trường hợp này là ký tự) cũng sẽ di chuyển.

Để điều này xảy ra, mỗi nút nên có vị trí (x, y) so với nút cha . Ví dụ: nhân vật của bạn có thể được đặt ở (1,0) so với nền tảng, bản thân nó có thể nằm ở (10,10) so với bản đồ trò chơi. Bằng cách đó, nếu nền tảng di chuyển, nhân vật của bạn sẽ di chuyển ngầm.

Trong cây phân cấp này, vị trí của mỗi nút bằng tổng vị trí của anh ta cộng với từng vị trí của các nút cha. Giả sử chúng ta muốn có được vị trí của nhân vật trên bản đồ. Chúng tôi tính toán:

(vị trí của ký tự) + (vị trí của nút cha) + (vị trí nút gốc) = (1,0) + (10,10) + (0,0) = (11,0)

OK, vì vậy tất cả thời gian này nhân vật của bạn đã đứng trên nền tảng. Nhảy thì sao? Chà, khoảnh khắc anh ta nhảy, bạn tách anh ta ra khỏi bụcgắn anh ta vào nút chứa nền tảng ; trong trường hợp này, bản đồ (nút gốc).

Khi anh ta hạ cánh lần nữa, gắn anh ta vào bất cứ nút nào anh ta đáp xuống.


1
Tôi cũng sẽ sử dụng tốc độ x và y từ nút để ảnh hưởng đến người chơi. Ví dụ 1: nền tảng di chuyển rất nhanh lên và dừng lại, người chơi có động lực tăng và được khởi chạy. Ví dụ 2: nền tảng đang di chuyển xuống chậm hơn một chút so với người chơi rơi với tốc độ chết người. Nền tảng nên được an toàn với đất trên thay vì SPLUT
AttackingHobo

đó là một cách tiếp cận thú vị nhưng dường như là một sự thay đổi hoàn toàn đối với động cơ của tôi chỉ để cho phép di chuyển các cơn bão. Có lẽ nếu tôi tạo objectOnPl Platform như một thành phần mà tôi có thể cho bất kỳ đối tượng nào chỉ mang lại hiệu ứng này theo thời gian?
Iain

10

Tôi sẽ đề nghị coi đây là một vấn đề vật lý giả và giải quyết nó bằng cách sử dụng ma sát mặt đất.

Bạn đã sử dụng trọng lực để giữ nhân vật trên mặt đất, điều này xử lý các tình huống mà các nền tảng di chuyển lên và xuống. Để xử lý chuyển động trái và phải, mặt đất cần tạo ra ma sát lớn cho nhân vật. Thông thường mức ma sát này sẽ là 1.0, hoặc 100%.

Nếu nhân vật đứng yên, thì vận tốc của họ bằng 0 và thay vào đó họ thừa hưởng 100% vận tốc của nền tảng do ma sát. Một cái gì đó như sau:

character_velocity = friction * platform_velocity

Lợi ích của phương pháp này là nó dễ dàng cho vay cơ chế nền tảng bổ sung, như có thể vượt qua ma sát trên các sườn dốc, cho phép nhân vật của bạn trượt. Nó cũng cho phép bạn dễ dàng giảm ma sát để tạo băng mà nhân vật sẽ trượt vào.

Nó cũng dễ dàng hơn để xử lý các vấn đề như tường treo thấp có thể đánh bật người chơi của bạn khỏi một nền tảng di chuyển. Nếu bạn chỉ đơn giản coi nhân vật là con của nền tảng cha mẹ, rất có thể nó sẽ không tương tác rất dễ dàng với phần còn lại của phát hiện va chạm của bạn mà không cần nhiều công việc.


0

Bạn có thể sửa vị trí người chơi không "tuyệt đối trong cấp độ" nhưng "liên quan đến nền tảng", sau đó có chức năng cung cấp vị trí thực tế của anh ta. Tôi không thích điều này mặc dù.

Có lẽ sẽ tốt hơn (và đơn giản hơn) khi liên kết người chơi với nền tảng để khi nền tảng di chuyển + x / + y, người chơi sẽ di chuyển càng nhiều.

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.