Tôi đang tạo trò chơi mà người chơi kéo thuyền xung quanh bằng ngón tay. Tôi đang sử dụng Box2D cho các khía cạnh vật lý của trò chơi. Đặc biệt, tôi đang sử dụng b2MouseJoint
để đính kèm sự kiện chạm vào thuyền để cho sự kiện chạm kéo thuyền.Mô phỏng khả năng chống nước trong Box2D
Nhưng có một vấn đề, đó là cách con thuyền di chuyển trong khi nó đang bị kéo là không thực tế; nó chỉ đơn giản có thể được kéo ở bất kỳ hướng nào, nơi mà trong thế giới thực, một chiếc thuyền chỉ có thể di chuyển dọc theo chiều dài của nó và sẽ có khả năng chống nước khiến khó thay đổi hướng di chuyển của thuyền. Vì vậy, tôi cần một cách để mô phỏng khả năng chống nước để làm cho phong trào thuyền thực tế.
Có thể mô phỏng nó trong Box2D không? Giảm xóc tuyến tính và giảm xóc góc chỉ đơn giản là làm cho chiếc thuyền khó di chuyển, nhưng tôi chỉ muốn chiếc thuyền dễ di chuyển theo một hướng và nó chỉ nên chống lại sự thay đổi hướng.
P.S. Tôi không nghĩ rằng mình cần đăng mã cho câu hỏi này, nhưng hãy cho tôi biết nếu bạn muốn xem đoạn mã.
Bạn đã thử sử dụng [phương trình kéo] (http://en.wikipedia.org/wiki/Drag_equation) chưa? Thuật ngữ diện tích mặt cắt * A * sẽ thay đổi tùy thuộc vào hướng của thuyền tương ứng với vận tốc của nó, mà nên làm những gì bạn muốn. Và bạn luôn có thể ước tính * A * với một số heuristic rẻ tiền. – Rahul
@Rahul, cảm ơn gợi ý. Tôi đã thêm phương trình kéo vào mã với một số kỹ thuật xấp xỉ (như sử dụng tốc độ so với góc thuyền để đưa ra khu vực tham chiếu), tôi có thể thấy một số khả năng chống nước được mô phỏng trong mã mới nhất nhưng dường như có một số chuyển động điên rồ khi thuyền va chạm với biên giới thế giới. Tôi đang cố gắng hiểu được những gì sai trước khi yêu cầu trợ giúp thêm ở đây. Một lần nữa, cảm ơn cho gợi ý. – Lukman
Một cách giải quyết táo bạo có thể là tạo ra rất nhiều thân tròn rất nhỏ với khối lượng nhỏ để lấp đầy không gian xung quanh thuyền. Tôi đã không kiểm tra khả năng tồn tại của điều này về vật lý hoặc sức mạnh xử lý (chưa) đó là lý do tại sao tôi không gửi nó như là một câu trả lời đúng. – Andrey