Làm cho quả bóng Box2D nảy lên chiều cao không đổi


8

Tôi muốn tạo một trò chơi như Doodle Jump. Tôi đang sử dụng libgdx và Box2d. Tôi cần phải làm thế nào để làm cho quả bóng của tôi nảy liên tục và có cùng chiều cao.

Tôi đã thử đặt chế độ phục hồi cơ thể của quả bóng thành 1 để nó có thể nhảy liên tục, nhưng khi tôi nhảy lên một khối thì "xung lực" nhỏ hơn. Tôi cũng đã cố gắng phát hiện vụ va chạm, sau đó áp dụng một xung nhưng nó cũng không hoạt động.

Làm thế nào tôi có thể làm cho quả bóng nảy lên cùng một độ cao mỗi lần?


6
Bạn có thể muốn xem xét tung ra "vật lý" của riêng mình thay vì sử dụng box2d. Một trò chơi như nhảy doodle sẽ không đòi hỏi quá nhiều công việc phải hoàn thành nếu không có động cơ vật lý.
13 lúc 17:30

Câu trả lời:


15

nhập mô tả hình ảnh ở đây

Khi quả bóng (đường cong quỹ đạo màu đỏ) chạm một khối cao hơn (hình chữ nhật màu xanh), nó sẽ di chuyển chậm hơn so với khi nó chạm một khối thấp hơn (hình chữ nhật màu xanh lá cây). Do đó, tại sao nó không nảy cao hơn bất kỳ nơi nào nó đến.

Về mặt vật lý, điều này có ý nghĩa.

Doodle Jump rõ ràng là không chính xác về thể chất. Nếu bạn muốn có một hiệu ứng như trong Doodle Jump trong đó xung lực từ một vụ va chạm luôn giống nhau, bạn nên tự đặt vận tốc dọc thành một số giá trị mỗi khi va chạm xảy ra, có ball.speed.y = 7;hoặc tương tự.


2

Thế giới Box2D sử dụng giảm xóc và ma sát, xem xét rằng thế giới có thể đang áp dụng giảm xóc cho các vật thể của bạn khi chúng được mô phỏng.


1

Tôi cũng muốn đưa vào hỗn hợp rằng có thể không cần sử dụng động cơ vật lý cho việc này. Tùy thuộc vào cách xử lý các va chạm trong trò chơi của bạn (cụ thể là phản ứng va chạm) mà bạn có thể thấy bạn có thể tạo một hệ thống hộp giới hạn rất đơn giản mà bạn có toàn quyền kiểm soát. Trên thực tế, trong các trò chơi theo phong cách "doodle jump", nó thậm chí còn dễ dàng hơn. Thay vì lo lắng về việc phát hiện các va chạm trong box2d và tìm hiểu xem liệu va chạm có nên bị vô hiệu hóa hay không (ví dụ: bạn nhấn một nền tảng từ bên dưới), kịch bản nhảy doodle thực sự đơn giản hơn rất nhiều. Nếu quả bóng của bạn đang di chuyển "xuống" (y đang giảm) và nó vượt qua giá trị y của một nền tảng, và nó nằm trong giới hạn trái / phải của một nền tảng, thì nó va chạm. Điều thực sự "phức tạp" duy nhất là đường bay parabol mà bạn đi sau,http://en.wikipedia.org/wiki/Parabola#Equation_in_Cartesian_coordins ).

Có thể dễ dàng giải quyết các va chạm với các vật phẩm khác trên thế giới không yêu cầu phản hồi (ví dụ: trúng thưởng) chỉ bằng các hộp giới hạn.

Box2D là một hiện tượng, nhưng thường là quá mức nếu bạn có yêu cầu đơn giản .. IMO.


0

Ghi nhớ (giá trị float = velocity.y) vận tốc của quả bóng trước khi nó va chạm với nền tảng và được đặt sau khi nảy: ball.velocity.y = value * (-1)

Có thể bạn sẽ thấy thú vị khi xem trong bài viết này:
bài đầu tiên bài
thứ hai

PS Tôi không thể gửi mã ở đây, xin vui lòng xem trong "bài đầu tiên" trong bình luận cuối cùng. Có mã làm thế nào tôi giải quyết vấn đề tương tự.

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.