2013-03-09 24 views
13

Tôi có một cơ thể có khối lượng là 10, và mỗi chu kỳ của chương trình tôi áp dụng một lực 100 cho nó bằng cách sử dụng cách tiếp cận đơn giản;Mũ vận tốc cơ thể Box2D?

Vector2 force = new Vector2(0, 1) * 100; 
bod.ApplyForce(force, bod.GetWorldCenter()); 

Nó hoạt động tốt, tăng tốc và tất cả điều đó, nhưng khi nó đạt vận tốc 10 (100/10 tôi giả định), nó sẽ không phát triển nhanh hơn. Tôi không phải là một nhà vật lý bằng bất kỳ phương tiện nào, nhưng tôi nhớ rằng cơ thể nên liên tục tăng tốc, giống như nó sẽ chịu lực hấp dẫn. Giới hạn tốc độ này có phải là kết quả của cách thức Box2D thực hiện mọi thứ không, hoặc tôi có đang làm hỏng thứ gì đó không? Ngoài ra, tôi phải làm gì để sửa nó.

LƯU Ý: tôi nhận được tốc độ hạn chế tương tự nếu tôi sử dụng ApplyLinearImpulse thay vì ApplyForce

Cập nhật: Tôi cũng nhận thức được giới hạn tốc độ tối đa tổng thể áp đặt bởi Box2D (trong b2Settings.h). Trong ví dụ của tôi, mục đang được đề cập đang di chuyển dưới giới hạn này khi thay đổi lực ứng dụng, có thể là 1000 hoặc 10000 sẽ luôn đi xung quanh vận tốc cực đại (lực/khối lượng).

+0

Đây không phải là câu trả lời đúng nhưng có thể bạn nên làm việc với quy mô tổng thể nhỏ hơn. Như thế này bạn có thể áp dụng lực lượng nhỏ hơn và sau đó sẽ không bị kẹt bởi một số giới hạn lực lượng. Box2d thường không thích khi bạn làm việc trên cơ sở quy mô quá lớn. – phemios

+0

quy mô là tốt. một đối tượng có khối lượng là 10kg và tôi đang áp dụng một lực 100N cho nó. Tốc độ giới hạn gió lên tới 10 m/s, đó là cách thức trong phạm vi quy mô cho Box2D. –

+1

Bạn đã kiểm tra giảm chấn tuyến tính chưa? – Davos555

Trả lời

3

Bạn đang đạt tốc độ cho phép tối đa của một đối tượng. Có hai cách để sửa lỗi này:

  1. Điều chỉnh tốc độ tối đa cho phép trong cài đặt Box2D của bạn; Mở Cài đặt và thay đổi phao/const MaxTranslation thành giá trị cao hơn, tôi giả sử nó là mặc định là 2.0.

  2. Giảm kích thước đối tượng của bạn, thực hiện các tính toán cần thiết, chia tỷ lệ các đối tượng của bạn trở lại. Đây là cách đúng kỹ thuật để làm việc đó, như ý kiến ​​Box2D cho MaxTranslation lưu ý:

Vận tốc tuyến tính tối đa của một cơ thể. Giới hạn này rất lớn và được sử dụng để ngăn chặn các vấn đề về số. Bạn không cần phải điều chỉnh điều này.

Vì vậy, hãy thử # 1 và nếu điều đó có hiệu quả, thì điều đó có nghĩa là bạn có thể cần mở rộng quy mô. Hy vọng rằng sẽ giúp.

+0

Câu trả lời này tiếp tục xuất hiện và điều đó là sai. Vui lòng đọc toàn bộ câu hỏi, đặc biệt là phần được đề cập 'Cập nhật' –

+0

Bạn có chắc chắn bạn đang đạt tốc độ ** ** 10 m/s không? Hoặc là bạn thực sự nhấn 10 mét trong khoảng cách cho mỗi bước thời gian? Box2D đang báo cáo chuyển động theo khoảng cách trên mỗi bước thời gian, vì vậy nếu bạn giả sử 60Hz, một phần thân đã bao gồm 'MaxTranslation' mặc định là' 2.0' đơn vị mỗi timestep thực sự di chuyển với vận tốc 120 m/s. Tôi không có ý nói thô lỗ, nhưng tôi nghĩ bạn có thể nhầm lẫn cả hai. –

+0

vâng, tôi rất tích cực. Tôi rất ý thức về những gì bạn đang mô tả. Nếu tôi đã đạt đến giới hạn, thì tôi sẽ không thể nâng nó lên khi tôi mô tả (với các lực lượng lớn hơn). –