Dessiner un object personnalisé courbé dans LIBGDX?

Ce dont j'ai besoin

J’ai récemment étudié LibGDX et je semble avoir heurté un mur. Le point bleu représente le doigt de l’utilisateur, la génération de la carte est l’endroit où je me trouve coincé. LibGDX fournit-il une méthode de dessin dynamic? objects courbes? Je pourrais tout simplement les générer moi-même sous forme d’images, mais l’image est alors extrêmement étendue au sharepoint laisser un espace suffisant pour que le doigt puisse en contenir trois! Mais il faudrait aussi avoir une taille PX de 1000 pour s’adapter à la conception de niveau.

Est-ce que je devrais dessiner des centaines de polygones rapprochés pour former une ligne courbe? D’un côté, il me faut un moyen de déterminer quand l’object a de bas en haut pour pouvoir générer un autre “morceau” de carte

Vous n’avez pas besoin de centaines de polygones pour créer une courbe comme celle que vous avez dessinée. Vous pourriez vous en sortir avec 40 quads à gauche, et 40 à droite, et le résultat serait plutôt lisse. Augmentez-le à 100 de chaque côté pour obtenir un rendu presque parfaitement lisse et aucun appareil moderne ne rencontrera de problèmes de fonctionnement à 60 ips.

Vous pouvez utiliser la classe Mesh pour générer un maillage procédural pour chaque côté. Vous pouvez faire en sorte que le maillage rest au même endroit, verrouillé par la caméra, et modifie ses vertices et ses UV pour donner l’impression que vous vous dirigez vers un couloir infiniment long. Cela nécessitera pas mal de calculs mathématiques à l’avance, mais une fois que vous les aurez maîsortingsés, vous devrez naviguer sans heurts.

Fondamentalement, votre conception de niveau peut être basée sur une sorte d’équation qui prend Y offset comme entrée. Ou bien il peut s’agir d’un long tableau de décalages, et vous pouvez utiliser une équation spline ou linéaire pour interpoler entre eux. Le résultat serait les coordonnées UV et X, qui peuvent être utilisées pour mettre à jour chacun des sumts de vos deux maillages.

Vous pouvez utiliser le vertex shader pour mettre à jour efficacement les coordonnées UV en utilisant un paramètre uniforme d’offset constant que vous mettez à jour chaque image. Ainsi, vous n’aurez pas à déplacer les données UV vers le GPU à chaque image.

Pour les positions de vertex, utilisez le float[] sous-jacent de votre maillage float[] et appelez setVertices() chaque image pour la mettre à jour. Info ici .


En fait, cela peut sembler meilleur si vous laissez les positions UV et X seules et si vous faites simplement défiler les positions Y vers le haut. Conservez quelques bandes de marge en haut et en bas de l’écran et déplacez simplement le haut du haut vers le bas après le défilement de l’écran.

Pourquoi ne pas créer un ensemble de formes courbes pouvant être assemblées de manière variable? Tout comme l’écart au milieu, chaque image sera au centre et au haut (avec la même courbure aux points de début et de fin) … Et entre les points de début et de fin, vous pouvez devenir fou de la forme.

Enfin, vous pouvez assembler ces images au hasard et créer un monde sans fin.

Si vous ne voulez pas vous arrêter au milieu à chaque fois, vous pouvez également avoir trois points d’entrée et de sortie (gauche, milieu, droite) … et après une image qui se termine à gauche, vous devez bien sûr append une image cela commence à gauche, mais pourrait se terminer ailleurs …