Làm thế nào để tôi xây dựng một công cụ vật lý 2D? [đóng cửa]


20

Các trò chơi tiên tiến nhất mà tôi đã thực hiện là một trò chơi bi-a 8 bóng được làm bằng công cụ vật lý Box2dFlashAS3 và một trò chơi nền tảng với các cấp độ.

Khi tôi làm các trò chơi nền tảng, tôi luôn muốn biết cách tạo ra một động cơ, để tôi có thể sử dụng lại nó. Khi tôi thấy các trò chơi có độ dốc, độ dốc cong, trọng lực hoàn hảo và vật lý thực tế, tôi luôn ước mình biết cách mã hóa động cơ.

Vui lòng đề xuất các kỹ thuật và bài viết cho bất kỳ kiến ​​thức cơ sở có liên quan nào là cần thiết.


Câu trả lời:


16

Trong khi tôi khuyên bạn nên chống lại cán engine vật lý của riêng bạn cho bất cứ điều gì khác hơn là những kinh nghiệm để làm việc đó (chỉ nhận ra có lẽ bạn nên vứt nó đi khi bạn đã hoàn tất - đó là thực sự khó khăn để có được tất cả các edgecases và giới hạn số / vấn đề ổn định sắp xếp ra và thời gian của bạn có thể được sử dụng tốt hơn nhiều bằng cách đóng góp cho một công cụ hiện có), đây là một vài tài nguyên:

Bài học tại Pool Hall: Phát hiện va chạm nhanh, chính xác giữa các vòng tròn hoặc hình cầu thảo luận về va chạm hình tròn / hình tròn và hình cầu / hình cầu.

Các N Hướng dẫn là tuyệt vời cho một sự hiểu biết cơ bản về phát hiện và phản ứng tách Axis lý dựa trên.


9

Erin Catto có tất cả các bài giảng của GDC về việc triển khai Box2D trực tuyến. Theo kinh nghiệm của tôi, Box2D cũng có mã đơn giản để đọc.


pdf là những tài liệu thực sự khó khăn. Nhưng, khi tôi đọc qua các tập tin cpp và h, như bạn đã nói, chúng là "dễ hiểu". Cảm ơn bạn.
Vishnu

+1. Box2D cũng rất cẩn thận về sự ổn định, một trong những điều rất khó khăn khi bạn tự lăn.
leander

5

Đây là cách bạn có thể làm điều đó:

Chuyển động gần đúng

Mọi đối tượng vật lý đều cần các vectơ này:

  • Vị trí : Trường hợp đối tượng.
  • Tốc độ : Làm thế nào vị trí của nó đang thay đổi.
  • Tăng tốc : Tốc độ của nó đang thay đổi như thế nào.

Vì vậy, theo trực giác, bạn cần thực hiện loại điều này mọi khung hình cho mọi đối tượng vật lý a:

a.speed    += a.acceleration
a.position += a.speed

Cạm bẫy : Đây được gọi là phương pháp tích hợp Euler . Xấp xỉ này là tốt hơn cho tốc độ và gia tốc nhỏ và với các bước thời gian nhỏ. Trong một trò chơi, điều này là bình thường. Nhưng nếu một vật thể di chuyển rất nhanh về phía một bức tường mỏng hoặc trực tiếp về phía một vật thể chuyển động khác, nó có thể bỏ qua va chạm với vật thể đó khi vị trí của nó được tăng thêm một lượng đủ lớn để vượt qua nó hoàn toàn. Nếu bạn có các vật thể chuyển động nhanh, bạn có thể cần Phát hiện Va chạm liên tục để thoát khỏi điều này.

Va chạm

Va chạm có thể được xấp xỉ với loại trình tự này:

  1. Phát hiện : Người ta phát hiện hai cơ thể giao nhau.
  2. Giải quyết : Vị trí của mỗi cơ thể được thay đổi để chúng không còn giao nhau.
  3. Vật lý : Tốc độ của mỗi cơ thể được thay đổi để tính động lượng, ma sát và phục hồi (độ nảy).

Điều này được gọi là Phát hiện va chạm rời rạc, vì nó xảy ra tại các thời điểm riêng biệt. Mỗi bước đáng được chú ý:

Bước 1: Phát hiện va chạm (Có phải mọi thứ đang va chạm?)

Đối với hai vòng tròn : Chỉ cần kiểm tra xem tâm của chúng có lớn hơn tổng bán kính của chúng không.

Đối với hai hình chữ nhật : Kiểm tra xem có bất kỳ tọa độ góc nào của chúng nằm trong hình chữ nhật khác không.

Đối với bất kỳ điều gì liên quan đến đa giác phức tạp hơn , bạn sẽ cần Định lý phân tách trục , đây là một chủ đề cho một câu hỏi khác.

Cạm bẫy : Thực sự có nhiều loại va chạm khác mà bạn có thể muốn xem xét. Một số thực sự phức tạp: Đa giác lồi có thể giao nhau nhiều lần !

Bước 2: Giải quyết va chạm (Di chuyển chúng ra xa nhau.)

Một phương pháp đơn giản để giải quyết xung đột là dịch bằng cách thâm nhập tối thiểu , sử dụng các giá trị thu được từ phát hiện va chạm. Điều này về cơ bản liên quan đến việc di chuyển các vật thể ngoài khoảng cách di chuyển tối thiểu có thể.

Ví dụ, xem xét va chạm vòng tròn trong đó một trong các vòng tròn được cố định tại chỗ. Vectơ chuyển vị tối thiểu có cùng hướng với sự khác biệt giữa các vectơ trung điểm của chúng. Độ dài của nó là sự khác biệt giữa tổng bán kính của chúng và khoảng cách giữa các tâm.

Ý tưởng này dễ dàng khái quát cho các hình dạng khác.

Cạm bẫy : Nếu cả hai vật thể va chạm đều có thể di chuyển được, bạn có thể phải di chuyển cả hai vật thể theo một phần nhỏ của khoảng cách tổng thể để có được sự gần đúng đáng tin cậy về chuyển động của chúng. Họ rõ ràng sẽ phải di chuyển theo các hướng khác nhau.

Bước 3: Va chạm vật lý (Thay đổi khác.)

Điều rõ ràng nhất có xu hướng xảy ra là một hoặc hai trong số các đối tượng thay đổi hướng tức là quay vectơ tốc độ của nó. Điều này là khá dễ dàng để thực hiện.

Cạm bẫy : Các vật thể có thể co giãn , nhưng chúng có thể không , trong trường hợp đó, tổng năng lượng trong hệ thống bị giảm. Bạn có thể cần kéo do sức cản của không khí. Ma sát (đặc biệt là ma sát tĩnh ) rất phức tạp để thực hiện .

Một số kết luận

Mô phỏng thực tế khó hơn theo cấp số nhân nếu bạn muốn mô phỏng. Bạn đang đi vào một bãi mìn của vô số trường hợp cạnh, công thức khó khăn và những tài liệu nghiên cứu ngày càng phát triển.

Nếu nhu cầu của bạn đơn giản hoặc bạn ham học hỏi, hãy thử nó.

Nếu nhu cầu của bạn phức tạp hoặc bạn không thích toán học, hãy lấy một công cụ vật lý để trình bày chi tiết cho bạn. Box2DBullet khá phổ biến trong các trò chơi.



4

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.