2017-05-05 3 views
0

Je suis créé deux corps dans Box2d, ils sont: Joueur et Plate-forme; Je voulais créer un jeu comme Doodle Jump, mais je ne sais pas comment créer un «monde infini avec des plateformes de production»;Monde vertical infini

Il est mon code où je suis en train de créer Tableau:

buckets = new Array<Bucket>(); 

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

Et ce code là où je suis "Trying" de changer la position de chaque plate-forme lorsque la position de la caméra est le changement:

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

Il travaux! Mais il change la position de la dernière plate-forme à fond très lointain:

+0

Les jeux de ce type simulent uniquement l'infini. Il suffit de déplacer toutes vos plateformes et garder votre personnage sur la même position verticale –

+1

vous n'avez pas besoin d'utiliser box2d pour un doodle jump clone, en fait, il ne ferait que le rendre plus complexe sans raison. Heureusement pour vous, il y a déjà un clone de saut de doodle fait avec libgdx complet avec le code source, en fait fait par les contributeurs principaux de libgdx, son super cavalier appelé https://github.com/libgdx/libgdx-demo-superjumper – Lestat

Répondre

1

En ce qui concerne comment créer un monde infini?

Utilisez l'instance mondiale shift origine méthode. Dans le code de la bibliothèque Box2D 2.3.2 C++, il s'agit de la méthode b2World::ShiftOrigin(const b2Vec2& newOrigin). Voici un extrait de la déclaration de cette méthode ainsi que la documentation:

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

En Java, vous devriez être en mesure de trouver une méthode d'interface similaire.

Avec décalage origine vous gardez la fenêtre d'affichage au monde physique centré sur (ou proche) l'origine du monde physique (de 0, 0). C'est essentiellement le moyen pratique d'accomplir ce que Yevhen Danchenko a suggéré dans les commentaires.

Une raison à cela est que l'implémentation de l'arithmétique à virgule flottante sur laquelle s'appuie Box2D n'est pas infiniment étendue ni infiniment précise. Ainsi, déplacer les choses aide à garder les choses plus proches de l'origine où les valeurs à virgule flottante sont plus précises et empêche les choses de sortir de la plage des valeurs pratiquement utilisables en supposant que vous montrerez seulement une plage limitée de valeurs x et y.