2017-05-05 96 views
0

我在Box2d中創建了兩個物體,它們是:玩家和平臺;無限垂直世界

我想創建類似Doodle Jump的遊戲,但我不知道如何創建「無限世界與生成平臺」;

還有就是我的代碼,我正在創建數組:

buckets = new Array<Bucket>(); 

for(int i=1;i<BUCKET_COUNT;i++){ 
    buckets.add(new Bucket(W/2,BUCKET_MARGIN*i, world)); 
} 

而且這個代碼我在哪裏「嘗試」來改變每個平臺的位置時相機位置的變化:

for(Bucket bucket : buckets){ 
     if(cam.position.y - (cam.viewportHeight/2) > bucket.getBody().getPosition().y + 22/PPM){ 
      bucket.repos(W/2,bucket.getBody().getPosition().y + BUCKET_MARGIN); 
     } 
    } 

它作品! 但是它將最後一個平臺位置改變到很遠的底部:

+0

這種類型的遊戲只能模擬無窮大。只需移動所有平臺,並將您的角色保持在同一垂直位置 –

+1

您不必使用box2d作爲塗鴉跳轉克隆,實際上它只會使其更加複雜而沒有理由。幸運的是,已經有一個使用libgdx完成的塗鴉跳轉克隆,其中包含源代碼,實際上由libgdx核心貢獻者製作,其名爲Super Jumper https://github.com/libgdx/libgdx-demo-superjumper – Lestat

回答

1

關於如何創建一個無限的世界?

使用世界實例轉換原點方法。在Box2D 2.3.2 C++庫代碼中,這是b2World::ShiftOrigin(const b2Vec2& newOrigin)方法。下面是該方法聲明以及其文檔的摘錄:

/// Shift the world origin. Useful for large worlds. 
/// The body shift formula is: position -= newOrigin 
/// @param newOrigin the new origin with respect to the old origin 
void ShiftOrigin(const b2Vec2& newOrigin); 

在Java中,您應該能夠找到類似的接口方法。

With 移位原點您將視口保持以物理世界原點(0,0)爲中心(或靠近)的物理世界。這基本上是完成Yevhen Danchenko在評論中建議的實際手段。

使用此的一個原因是Box2D依賴的浮點運算的實現本身並不是無限寬的,也不是無限精確的。所以,移動事物有助於使事物更接近浮點值更準確的原點,並且假設您只會顯示有限的x和y值範圍,從而避免事物脫離實際可用值的範圍。