Vật lý nền tảng 2D tốt [đóng]


76

Tôi có một bộ điều khiển nhân vật cơ bản được thiết lập cho một nền tảng 2D với Box2D và tôi bắt đầu tinh chỉnh nó để cố gắng làm cho nó cảm thấy tốt. Động cơ vật lý có rất nhiều nút để điều chỉnh và lần đầu tiên tôi không rõ ràng, viết bằng động cơ vật lý, cái nào tôi nên sử dụng. Nhảy có nên áp dụng một lực cho một vài dấu vết? Một xung lực? Trực tiếp đặt vận tốc? Làm thế nào để tôi ngăn hình đại diện dính vào tường mà không lấy đi mọi ma sát của nó (hoặc tôi lấy đi tất cả ma sát, nhưng chỉ trong không khí)? Tôi có nên mô hình nhân vật như một viên nang? Một hộp có góc tròn? Một hộp có hai bánh? Chỉ cần một bánh xe lớn? Tôi cảm thấy như ai đó phải làm điều này trước đây!

Dường như có rất ít tài nguyên có sẵn trên web không phải là "vật lý đầu tiên của em bé", tất cả đều bị cắt đứt khi tôi hy vọng ai đó đã giải quyết được vấn đề. Hầu hết các ví dụ về động cơ vật lý cho người chơi platformer đều có các điều khiển cảm giác lơ lửng, hoặc nhảy trong không khí, hoặc hành vi dễ khai thác khi độ thâm nhập tạm thời quá cao, v.v.

Một số ví dụ về những gì tôi muốn nói:

  • Một cú nhảy ngắn nhảy một khoảng cách ngắn; một vòi dài nhảy cao hơn.
  • Trượt ngắn khi dừng hoặc đảo hướng ở tốc độ cao.
  • Đứng ổn định trên các đường nghiêng (nhưng có thể trượt xuống khi vịt).
  • Tốc độ tương tự khi sử dụng bộ điều khiển analog.
  • Tất cả những thứ khác tách biệt các nền tảng tốt từ các nền tảng xấu.
  • Dám tôi đề nghị, nền tảng di chuyển ổn định?

Tôi không thực sự tìm kiếm "hey, làm điều này." Rõ ràng, điều đúng đắn phải làm là phụ thuộc vào những gì tôi muốn trong trò chơi. Nhưng tôi hy vọng ai đó đã trải qua các khả năng và nói "kỹ thuật A cũng có tính năng X tốt, kỹ thuật B làm Y tốt, nhưng điều đó không hoạt động với C", hoặc có một số ví dụ hoạt động vượt ra ngoài "if (key = = dấu cách) ký tự.impulse (0, 1) "

Câu trả lời:



25

Thật khó để thực hiện, giả sử, vật lý 'giống như Mario' sử dụng một động cơ vật lý thực sự.

Lần trước tôi đã thử điều này, bằng cách sử dụng Chipmunk, tôi đã mô hình hóa trình phát thành 2 vòng tròn - một 'vòng tròn cơ thể' trên đầu một 'vòng tròn chân'

"Vòng tròn bàn chân" có một số ma sát, không nảy và khá nhỏ. 'Vòng tròn cơ thể' lớn hơn và không ma sát, để tránh dính vào tường / sườn dốc

Đối tượng bị hạn chế không cho phép xoay - nó sẽ chỉ trượt xung quanh

Nếu 'bàn chân' chạm vào một cái gì đó, hoặc nằm trong một vài khung hình cuối cùng (để cho phép rơi xuống dốc), người chơi được coi là trên mặt đất (cũng có thể đã kiểm tra bề mặt bình thường)

Lâu lâu tôi mới xem mã, nhưng hành vi diễn ra theo dòng:

Khi ở trên mặt đất:

  • Áp dụng 'trọng lực bổ sung' (lực hướng xuống để giúp chạy xuống dốc)
  • Áp dụng ma sát mặt đất (lượng giảm xóc ngang lớn hơn)
  • Áp dụng lực di chuyển trái / phải, dựa trên các điều khiển.
  • (Giảm quy mô lực di chuyển trái / phải khi đạt tốc độ chạy tối đa)
  • Nếu nhảy được nhấn, áp dụng xung lên

Khi ở trên không:

  • Áp dụng sức cản không khí (một lượng nhỏ giảm xóc ngang)
  • Áp dụng trọng lực thường xuyên (hoặc giảm)
  • Áp dụng lực di chuyển trái / phải, nếu bạn cho phép điều khiển trên không

Bạn phải cẩn thận một chút khi chuyển đổi giữa hai trạng thái - hãy nhớ rằng khi chạy xuống dốc, bạn có thể rời khỏi mặt đất trong một vài khung hình - bạn có thể không muốn chuyển trạng thái / không cho phép nhảy vào thời điểm đó

Một vài điều khác cần chú ý, mặc dù ... các nền tảng 'nhảy lên' có thể khó thực hiện và khi bạn bắt đầu làm những việc thú vị (di chuyển nền tảng, xoay vòng thế giới, v.v.), bạn phải cẩn thận đảm bảo người chơi không thể bị mắc kẹt / nghiền nát bởi bất kỳ đối tượng chuyển động 'điều khiển hoạt hình' nào.


Tôi biết đây là một câu trả lời khá cũ nhưng tôi có một số câu hỏi về điều này. 1) Làm thế nào để bạn giải quyết "giữ cùng tốc độ cho dù bạn đang ở độ dốc địa hình nào?" 2) Nếu bạn đang sử dụng một vòng tròn nhỏ cho bàn chân và một vòng tròn lớn hơn cho cơ thể, liệu người chơi có bị treo ở rìa một số lần không? Tôi thực sự quan tâm đến aproach của bạn.
Notbad

18

Thành thực tôi không nghĩ sử dụng một công cụ vật lý là cách tiếp cận phù hợp cho một cái gì đó thuộc miền kích thước đó với các yêu cầu siêu nghiêm ngặt.

Chỉ cần viết tất cả cho mình. Bạn sẽ nhận được kết quả tốt hơn nhiều bằng cách nói "di chuyển nhân vật lên bằng x đơn vị trong hình parabola này khi giữ nút nhảy cho chiều dài y" hơn là có một loạt các nút để điều chỉnh.


Tôi đã làm điều này nhiều lần trong quá khứ. Nó hoạt động đến một điểm, nhưng cuối cùng bạn luôn ném ra thứ khác vì "quá khó" để thực hiện vật lý ngay với bộ điều khiển hacky. Trong trò chơi đặc biệt này, tôi hy vọng sẽ liên quan đến một số cơ chế lò xo / dây cho chuyển động của người chơi, và điều đó đã đi vào cõi "Tôi thà hack một động cơ vật lý thực sự" chứ không phải là "Tôi thà hack một cái hộp động lực".

3
Tôi thà hack một cái hộp, ít nhất là nó không thể hoạt động được, trong khi đó một động cơ vật lý có xu hướng phát nổ nếu bạn ném quá nhiều lực vào nó vì bạn cần phải hạn chế chuyển động đến các thông số kỹ thuật chính xác (và các ràng buộc của động cơ vật lý không xảy ra ' T cứng nhắc, họ chỉ có thể cố gắng tuân thủ rất nhiều). Ngoài ra, áp dụng các lực lượng để giải quyết một vấn đề không mong muốn có xu hướng ảnh hưởng đến mọi thứ khác, dẫn đến địa ngục.
Kaj

10

Tôi đã viết một loạt bài viết về việc xây dựng một trò chơi nền tảng từ đầu bằng cách sử dụng các công nghệ hiện đại và nó bao gồm cách tôi xử lý vật lý đơn giản:

http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-pl platform-game-part-2-sync-defection /

Tuy nhiên, nếu bạn muốn một cái gì đó công nghệ cao hơn, hoàn toàn có thể tiếp cận điều này bằng cách sử dụng toàn bộ động cơ vật lý. Đây là một kỹ thuật bạn có thể sử dụng (từ Little Big Planet) để làm cho nhân vật người chơi trở thành một phần tích hợp đầy đủ của công cụ vật lý:

Thay vì áp dụng các xung hoặc cài đặt vận tốc để di chuyển người chơi như 'đầu vào bên ngoài' cho động cơ vật lý, bạn có thể phát triển một ràng buộc điều khiển nhân vật.

Vì vậy, ràng buộc này sẽ có tốc độ và hướng mong muốn của người chơi làm đầu vào (từ trò chơi) và sẽ mô hình hóa những thứ như sức mạnh và tốc độ tối đa của người chơi. Ràng buộc sẽ cố gắng di chuyển người chơi theo các đầu vào của nó (và tuân theo mức tối đa), và vì hạn chế của nó, nó sẽ tác dụng một lực bằng nhau và ngược lại lên đối tượng mà người chơi đang đứng, do đó cho phép người chơi đứng trên các nền tảng di chuyển và để ảnh hưởng đến những thứ anh ấy di chuyển qua.

Làm những việc như thế này có nghĩa là bạn có thể khiến người chơi hoàn toàn có thể tự nhiên xử lý các tình huống như nằm dưới một đống hộp lớn, hoặc nhảy qua một số nền tảng di chuyển bởi vì giờ đây anh ta là một phần cốt lõi của động cơ vật lý.

Mong rằng sẽ giúp!

Chúc mừng, Paul.


6

Câu hỏi này đã thấy cuộc thảo luận quan trọng trên các diễn đàn Box2D. Đọc qua các cuộc thảo luận về chuyển động của nhân vật, nhảy hoặc platformer và bạn sẽ gặp mọi vấn đề có thể. Tuy nhiên, vấn đề trở nên phức tạp đến mức hệ thống lọc va chạm đã được cập nhật và một ví dụ Test Bed được tạo ra chỉ để cho thấy cách thực hiện.

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.