2013-01-02 5 views
1

J'ai une liste de tableaux qui contient des tuiles. Quand je place une nouvelle tuile, la nouvelle tuile est placée sur l'ancienne, mais l'ancienne est toujours là et peut causer des problèmes. Par exemple, il y a une tuile de pierre que le joueur ne peut pas traverser. Une tuile d'air est placée là, supposément laissant le joueur traverser. Cependant, la tuile de pierre n'est jamais supprimée, de sorte que le joueur ne peut pas passer à travers puisque la tuile de pierre est solide et provoque une collision. Puis-je simplement supprimer le carreau de l'arrayliste? Je ne pense pas que je puisse parce que le reste des données dans la liste va "se déplacer" et remplir le trou où l'ancienne tuile était. Comment est-ce que je pourrais enlever la tuile et placer une nouvelle tuile par-dessus sans déplacer le reste des données?Suppression de données en toute sécurité d'un groupe de listes

+0

Pourquoi vous ne pouvez pas remplacer la pierre avec de l'air? – Anton

+0

Merci pour toutes les bonnes réponses! –

+0

Assurez-vous que cette tuile est seulement référencée dans cette liste dont vous parlez. La fausseté la plus fréquente est qu'il existe différentes listes (par exemple, graphiques, collision, logique, etc.) auxquelles la logique du jeu permet d'accéder, de sorte que vous devez appliquer ce changement à toutes les listes impliquées. – JayC667

Répondre

0

Vous pouvez utiliser la méthode set() de ArrayList pour "remplacer" un objet de la liste par un autre.

 tileList.set(index, newTileObject); 

remplacera la mosaïque à l'index par le nouvel objet mosaïque. Laissant toutes les autres tuiles dans leur emplacement d'origine dans la liste.

1

Si vous voulez supprimer un élément d'un ArrayList et que vous voulez toujours le reste de la liste pour maintenir en place, il suffit de remplacer avec null, c'est autorisé:

myList.set(i, null); 

Bien sûr cela signifie que vous y avoir à tester la valeur lors de l'utilisation.

2

Vous devez utiliser la méthode set(int index, E element) de ArrayList.

Acc. à Javadocs:

Remplace l'élément à la position spécifiée dans cette liste avec l'élément spécifié

0

Utilisez un objet Tile avec un ENUM pour stocker son état:

public class Tile { 

    public enum State = { WALL, OPEN }; 

    private State state; 

    public void setState(State state) { 
    this.state = state; 
    } 
} 

Lorsque vous besoin d'échanger entre l'espace ouvert et le mur, vous venez de changer son état:

tile.setState(State.WALL); 
+0

Ou s'en tenir à des règles de nommage et d'appeler cette méthode 'setState()' ;-) – JayC667

+1

Dans ce cas oui, lors du changement de l'état serait plus complexe, je collerais avec changeState(). Changé (jeu de mots). – asgoth

Questions connexes