簡體   English   中英

在Box2D中,如何防止運動平台和動態物體之間發生抖動?

[英]How do I prevent jitter between moving kinematic platform and a dynamic body in Box2D?

我有一個移動平台(運動機構),它從初始位置上升。

b2BodyDef platformDef;
platformDef.type = b2_kinematicBody;
platformDef.linearVelocity = b2Vec2(0.f, 0.5f);

現在我有一個球(動態物體),由玩家控制,它可以在上述平台上騎行,從其位置上升。 這是球的數據:

b2BodyDef ballDef;
ballDef.type = b2_dynamicBody;
ballDef.fixedRotation = true;
b2Body *ball = b2dWorld.CreateBody(&ballDef);
b2FixtureDef fixDef;
fixDef.shape = &shapeCircle;  // a simple b2CircleShape with radius 0.6m
fixDef.density = 1.f;
fixDef.friction = 0.2f;
fixDef.restitution = 0.3f;
ball->CreateFixture(&fixDef);

現在,球正好在移動平台的頂部行進,而在整個行進過程中,球的身體會有輕微的抖動,即,球不斷與正在移動的平台碰撞。 我嘗試將球的恢復原狀設置為0,無濟於事。

如果需要此細節,則系統的像素與米的比率為0.02。

我相信最好的解決方案是兩個實體之間的兩個焊接接頭之一。

如果主體在平台上處於“靜態”狀態(不能左右移動),則當球在平台上時,在球和平台之間創建焊接接頭。

如果球可以左右移動,則在兩者之間創建一個棱柱形的接頭,接頭的方向平行於平台。

我使用了類似的技術使蜘蛛繞小行星行走( 在此處 )。

擺脫這個問題的真正想法是,物理引擎中有一些工具可用於真正增強場景背后的體驗,而這些體驗並不總是在模擬中發揮作用。 使用情境邏輯來改變動態。

在這種情況下,在平台上或離開平台意味着您必須連接或斷開某種其他機制才能提供更好的體驗。

引擎可以處理它。 在上面的示例中,用於在物體周圍行走的關節在小行星包圍的外殼的每個頂點處都發生了變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM