2010-04-02 24 views
7

Tôi đang sử dụng Box2d cho trò chơi xếp hạng. "Mặt đất" là một loạt các ô, trong đó mỗi ô là một phần thân tĩnh với một hình dạng cảm biến. Tôi có thể làm cho ma sát có hiệu lực cho điều này, mặc dù các đối tượng không thực sự "va chạm" với mặt đất? Nếu Box2d không cho phép tôi làm điều này, tôi xem xét cố gắng tự thực hiện bằng cách phát hiện lực nào hiện đang di chuyển đối tượng và áp dụng một lực đối diện với nó, nhưng tôi không chắc chắn cách phát hiện ra lực lượng.Ma sát trong Box2d

Trả lời

0

ApplyImpulse() thay vì ApplyForce() hoạt động tốt hơn nhiều.

+3

Tại sao 'ApplyImpulse()' hoạt động tốt hơn 'ApplyForce()'? –

6

Cách khác để thực hiện việc này là đặt linearDamping trên cơ thể của bạn. Bạn có thể đặt tùy chọn này khác nhau tùy thuộc vào ô mà đối tượng của bạn đang bật.

1

Ma sát được hướng vào vận tốc của cơ thể, bất kể các lực khác.

Nếu thiết lập giảm xóc tuyến tính không đủ hoặc dựa vào thuộc tính của b2Body là không phù hợp, bạn có thể dễ dàng tính toán lực ma sát phi tuyến và gọi ApplyLinearImpulse() hoặc ApplyLinearForce() mỗi khung.

  • Query vận tốc với b2Body.GetLinearVelocity(), quy mô (phi tuyến) kết quả như mong muốn để có được lực lượng, và đảo ngược dấu hiệu của cả hai thành phần.

  • Nếu bạn quyết định dừng cơ thể (khi nó đủ chậm để dính), SetLinearVelocity() thực hiện thủ thuật mà không cần tính toán.

Các vấn đề liên quan