2017-08-18 3 views
1

A ce jour que je charge ma texture comme ceci:Libgdx donne à chaque texture des propriétés d'image?

Texture texture = new Texture(path); 
Sprite sprite = new Sprite(texture); 
batch.draw(sprite.getTexture(), x,y); 

simple que cela. Mais maintenant j'ai un petit problème, j'ai beaucoup de types d'entités, et chacun a une taille différente, cependant, j'ai une carte isométrique, et j'ai besoin de centrer chaque sprite sur la tuile (pas tous les sprites sont plus grand que la tuile, donc ce n'est pas quelque chose qui dépasse 4 tuiles ou quelque chose, ils sont juste un peu plus gros que la tuile, et a besoin d'un peu de décalage).

Donc, fondamentalement, je besoin d'un système d'emballage, ce qui peut emballer une image sprite (ou un ensemble d'images avec la même taille) et un propriétés inclus à l'intérieur, ce qui aura offsetX et offsetY donc je peux utiliser comme ça:

batch.draw(sprite.getTexture(), x + offsetX, y + offsetY); 

Existe-t-il une telle chose dans LibGDX?

Je l'ai déjà essayé de le faire:

int x = (i * GameTile.TILE_WIDTH/2) - (j * GameTile.TILE_WIDTH/2) - (texture.getWidth()/2); 
    int y = (i * GameTile.TILE_HEIGHT/2) + (j * GameTile.TILE_HEIGHT/2) - (texture.getHeight()/2); 

i et j est la position de tuiles dans le tableau.

+0

pourquoi ne vous obtenez pas seulement la taille de la texture et de calculer le décalage? Je veux dire, tu sais quelle est la taille d'une tuile ... Pas besoin d'emballer dans des groupes ou quoi que ce soit. –

+0

Comment feriez-vous cela? chaque sprite situé différemment dans l'image, je veux dire comment pouvez-vous le rendre parfait sur la tuile? – Jony

+0

Oh, attends, je crois que j'ai mal compris. Vous avez une texture qui contient tous les sprites? Je suppose que vous ne devriez pas mélanger les différentes tailles de sprite dans un seul fichier de texture –

Répondre

0

C'est ce que je fais. Choisissez une taille d'image au moins aussi grande que votre plus grande image-objet. Faites toutes vos images source sprite à cette taille, en mettant autant de rembourrage invisible autour d'eux que nécessaire pour les centrer dans ce rectangle. Utilisez la fonction stripWhitespace du TexturePacker LibGDX. Et gardez allowRotation désactivé. L'atlas ne sera pas plus grand qu'avant, mais il a maintenant des données de décalage que vous pouvez utiliser.

Lors de l'exécution, obtenir des références à AtlasRegions au lieu de jeter implicitement TextureRegions. Une AtlasRegion a les paramètres de décalage dont vous avez besoin. Soustrayez la moitié de la largeur et de la hauteur de la taille de votre image source de celle-ci et ajoutez-la au centre de l'endroit où vous voulez la dessiner.

+0

modifier Est-ce que libgdx a un outil pour recadrer largeur spécifique/hauteur au large d'une grande image? Comme si j'ai un tileset dans une image .png, l'un après l'autre – Jony

+0

Je ne comprends pas votre question. Il a TextureUnpacker qui peut diviser un atlas en fichiers séparés pour les images, mais je pense que cela ne fonctionne que pour les atlas réels qui ont un fichier pack. Il y a aussi une application gratuite appelée Shoebox en ligne qui peut diviser un atlas sans un fichier pack. Autre que cela, le format de fichier de pack LibGDX est assez simple à comprendre, vous pouvez donc écrire un analyseur assez facilement pour ajouter des données de décalage en tant que processus de post-traitement. – Tenfour04