Thực hiện vật lý xem hàng đầu bằng cách sử dụng box2D


7

Làm thế nào có thể xem các trò chơi vật lý hàng đầu trong box2D? Một ý tưởng tôi có là thiết lập vận tốc tuyến tính của vật thể bằng tay hoặc thay đổi giảm xóc tuyến tính và góc khi vật thể của tôi di chuyển trên các bề mặt khác nhau. Ví dụ, nếu đối tượng của tôi ở trên một bề mặt ẩm ướt, nó sẽ có giảm chấn tuyến tính ít hơn và nếu trên bề mặt gồ ghề thì nó sẽ có nhiều giảm xóc hơn. Và để xem liệu đối tượng của tôi có rơi xuống một cạnh không, tôi sẽ thử sử dụng AABBvà kiểm tra xem nó vẫn ở bên trong hay xem bằng tay nếu object.x > boundary.xcó cách nào tốt hơn không?

Câu trả lời:


5

Nhìn vào b2FrictionJoint để mô phỏng "các bề mặt gồ ghề" từ trên xuống. Chuyển động giảm xóc cuối cùng không thực tế.

Về cơ bản, bạn có thể gắn các đối tượng của mình vào bất cứ thứ gì bằng cách sử dụng khớp ma sát để làm cho nó hoạt động. (Tôi gắn tất cả chúng vào một vật thể sàn, nhưng nó không quan trọng lớn hay lớn ở đâu.)


3

Nếu bạn chỉ đơn giản đặt trọng lực về 0 thì mô phỏng vật lý hoạt động tốt cho trò chơi từ trên xuống.


2
Vô hiệu hóa gravitiy không biến Box2D thành mô phỏng vật lý từ trên xuống. Làm thế nào bạn sẽ mô phỏng ma sát mặt đất? Một chiếc xe lái qua bùn thì sao?
bummzack

Tôi sẽ làm điều đó bằng cách thay đổi mật độ hoặc ma sát của xe hoặc một cái gì đó bằng cách sử dụng các cảm biến cho khu vực bùn. Phải thừa nhận rằng đó là hacky về mặt ngữ nghĩa bởi vì đó không phải là mục đích của các tính năng đó, nhưng đó là cách đơn giản để giữ Box2D làm tất cả công việc cho bạn.
jhocking

1

Box2D được thiết kế để hoạt động với không gian hai chiều. Trong trò chơi platformer 2D, chúng tôi có thể mô tả các đối tượng của mình với cơ sở XY:

--------- X
|
|
|
Y

Trong trò chơi này không có chiều sâu, ok? Nếu chúng ta muốn xem cùng một trò chơi với góc nhìn từ trên xuống, không gian của chúng ta cần một chiều Z mới thứ ba, để mô tả chiều sâu. Chuyện gì xảy ra Bây giờ chúng ta có ba chiều nhưng Box2D được thiết kế theo hai chiều.

Trò chơi có thể trực quan hai chiều, nhưng logic là ba chiều trong trường hợp này. (nhìn từ trên xuống).

Tôi nghĩ rằng sẽ tốt hơn khi sử dụng một thư viện vật lý 3D khác hoặc tự thực hiện.

Tôi chưa bao giờ thấy một trò chơi xem hàng đầu bằng Box2D và tôi sẽ rất biết ơn nếu ai đó biết.


2
Tôi không đồng ý rằng "logic" nhất thiết phải là 3D. Đối với trò chơi 2D, Z thường chỉ là thứ tự mà các đối tượng được vẽ cho mục đích trực quan. Điều này không cần phải được mô phỏng hoặc gắn liền với vật lý.
Brian Ortiz

Tôi đã nói rằng trong "trường hợp này", chúng ta cần một logic ba chiều. Z mà bạn nói không phải là một chiều mới, nó chỉ là một hình thức để mô tả thứ tự tương đối trong đó các họa tiết phải được vẽ. (thuật toán họa sĩ)
momboco

Trong Box2D, tọa độ Y là độ cao (và trọng lực được áp dụng). Tôi không biết làm thế nào để thay đổi điều này nếu bạn muốn một trò chơi có góc nhìn từ trên xuống. Bởi vì nếu bạn sử dụng trọng lực, thì bạn mất một chiều và nó cần một chiều thứ ba.
momboco

3
Đây là một trò chơi từ trên xuống sử dụng Box2D: sevengames.com/nitro-racers . Tôi tình cờ biết điều này bởi vì tôi đã giúp lập trình nó: P Các chuyển động của xe hơi bị hack, với cài đặt xoay bằng tay và ma sát trên cỏ cũng được thực hiện thủ công, nhưng phần còn lại (tăng tốc, va đập và nảy, va chạm với môi trường ) là Box2D thuần túy.
Bart van Heukelom

Cảm ơn rất nhiều. Tôi có một số câu hỏi. Sự va chạm với môi trường chỉ tạo ra mà chiếc xe dừng lại. Bạn có nghĩ rằng sự phục hồi có thể được hoàn thành với Box2D không? Ma sát trên cỏ được thực hiện thủ công do một số hạn chế của Box2D? Khi tôi phát triển các trò chơi với chế độ xem hàng đầu, đôi khi tôi đã sử dụng logic 3d với z cho độ cao và sau đó liên kết giá trị này với tỷ lệ (ví dụ: vỏ được phóng từ súng lục). Với Box2D tôi chưa tìm ra cách giải quyết vấn đề này.
momboco

0

Như jhocking đã nói, nó giống nhau khi sử dụng Box2D cho chế độ xem bên hoặc trên cùng.

Chỉ cần vô hiệu hóa trọng lực và chơi với độ sâu bằng cách sử dụng bộ lọc colision trong hướng dẫn sử dụng box2D.

bởi vì sẽ không có lực hấp dẫn, các vật thể sẽ "nhẹ" hơn bình thường, khi đẩy chúng. Chơi với quần chúng và các lực lượng để đạt được kết quả tương đương.

Những gì bạn gọi là giảm xóc, nên là ma sát phổ biến trong Box2D, tôi nghĩ vậy. và như để kiểm tra giới hạn cấp độ của bạn, có cảm biến. hình dạng sẽ cho bạn biết khi một cái gì đó đi qua :)


2
"bởi vì sẽ không có lực hấp dẫn, các vật thể sẽ" nhẹ "hơn bình thường, khi đẩy chúng": Tại sao? Khối lượng của chúng không thay đổi chỉ vì thiếu trọng lực.
alxx

1
Khối lượng của họ sẽ không thay đổi. Nhưng trọng lực sẽ không còn giữ chúng xuống đất, vì vậy khi chúng không chạm vào bề mặt, chúng sẽ dễ dàng di chuyển hơn.
Tấn côngHobo
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.