2017-05-05 2 views
0

Ich bin zwei Körper in Box2d erstellt, sie sind: Player und Platform;Unendliche vertikale Welt

Ich wollte ein Spiel wie Doodle Jump erstellen, aber ich weiß nicht, wie man "unendliche Welt mit erzeugenden Plattformen" erstellt;

Es ist mein Code, wo ich Array erschaffe:

buckets = new Array<Bucket>(); 

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

Und dieser Code, wo ich bin "Trying" Position jeder Plattform zu ändern, wenn die Kameraposition ändern ist:

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); 
     } 
    } 

Es funktioniert! Aber es ändert letzten Plattform Position zu sehr weit unten:

+0

Spiele dieses Typs simulieren nur unendlich. Bewegen Sie einfach alle Ihre Plattformen und halten Sie Ihren Charakter auf der gleichen vertikalen Position –

+1

Sie müssen Box2D nicht für einen Doodle-Jump-Klon verwenden, eigentlich würde es nur komplizierter machen, ohne Grund. Glücklicherweise gibt es bereits einen Doodle-Jump-Klon, der mit libgdx erstellt wurde, komplett mit Quellcode, der eigentlich von den libgdx-Core-Contributors erstellt wurde. Er heißt Super Jumper https://github.com/libgdx/libgdx-demo-superjumper – Lestat

Antwort

1

In Bezug auf wie eine unendliche Welt zu schaffen?

Verwenden Sie die Weltinstanz Shift-Ursprung Methode. Im Box2D 2.3.2 C++ - Bibliothekscode ist dies die b2World::ShiftOrigin(const b2Vec2& newOrigin)-Methode. Hier ist ein Auszug aus dieser Erklärung der Methode zusammen mit seiner Dokumentation:

/// 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); 

In Java, sollten Sie in der Lage sein, eine ähnliche Interface-Methode zu finden.

Mit shift Herkunft Sie behalten das Ansichtsfenster auf die Physik Welt zentriert auf (oder nahe) der physikalischen Welt Ursprung (von 0, 0). Dies ist im Grunde das praktische Mittel, um das zu erreichen, was Yevhen Danchenko in den Kommentaren vorgeschlagen hat.

Ein Grund dafür ist, dass die Implementierung der Fließkomma-Arithmetik, auf die Box2D angewiesen ist, nicht unendlich weit reichend und unendlich genau ist. Das Verschieben von Dingen hilft also, die Dinge näher am Ursprung zu halten, wo die Gleitkommawerte genauer sind, und verhindert, dass die Werte außerhalb des Bereichs der praktisch nutzbaren Werte liegen, vorausgesetzt, dass Sie nur einen begrenzten Bereich von x- und y-Werten anzeigen.