2016-01-19 3 views
1

J'essaye de cliquer sur une tuile et de changer sa couleur. Jusqu'à présent, j'ai ceci:En cliquant sur une tuile et en changeant sa couleur dans libGdx

if(Gdx.input.isTouched()){ 
      Vector3 click = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); 
      camera.unproject(click); 
      Cell clicked = path.getCell((int)click.x, (int)click.y); 
      clicked.getTile(); 
    } 

Une fois clicked a ses coordonnées de tuiles (en supposant que je l'ai fait correctement) Je veux maintenant dessiner un carré bleu sur cette tuile. Comment ferais-je cela? J'ai testTile.png dans mon dossier de ressources si cela aide. J'ai dessiné d'autres images à l'écran en utilisant batch.draw();. Si plus d'informations sont nécessaires, n'hésitez pas à demander.

path est le TiledMapTileLayer.

Répondre

0

La façon dont j'aborderai ce problème est d'avoir une liste de classe personnalisée stockant les emplacements où le carré bleu doit être dessiné et l'image-objet qui doit être dessinée. (Stocker des sprites dans la liste vous donnera plus de flexibilité) Donc, dans votre méthode de rendu, vous allez dessiner ces tuiles en faisant une boucle sur la liste.

code Exemple: (pourrait pas penser à un meilleur nom que SpriteMap)

public class SpriteMap { 
    int posX; 
    int posY; 
    Sprite sprite; 

    public SpriteMap(int posX, int posY, Sprite sprite) { 
     this.posX = posX; 
     this.posY = posY; 
     this.sprite = sprite; 
    } 
    //ignoring getters 
} 

Disons que vous avez une liste de SpriteMap dans votre classe où vous allez rendre et ont également accès à la liste Méthode isTouched().

List<SpriteMap> spriteMapList = new ArrayList<SpriteMap>(); 

maintenant dans votre IsTouched

if(Gdx.input.isTouched()){ 
     Vector3 click = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); 
     camera.unproject(click); 
     spriteMapList.add(new SpriteMap((int)click.x, (int)click.y, new Sprite(THE_BLUE_BOX_TEXTURE)); 
} 

Maintenant, dans votre méthode render tout ce que vous avez à faire est de boucler la liste et tracez chaque sprite de la liste des objets SpriteMap.

//Pseudo code inside render after batch.begin(); 
for(SpriteMap spriteMap : spriteMapList) { 
    spriteMap.sprite().setPosition(spriteMap.posX, spriteMap.posY); 
    spriteMap.draw(batch); 
} 

NOTE Réutiliser la texture de la boîte bleue. Assurez-vous également de dessiner une boîte bleue après avoir dessiné la carte sinon elle sera cachée derrière la carte.

UNE AUTRE NOTE Les positions x et y de clicked doivent être ajustées pour que l'image-objet soit dessinée sur la case exacte. Alors changez cela en conséquence. J'ai directement utilisé X et Y à partir du clic, mais vous devrez peut-être les changer.

Espérons que ça aide.