# Objekte in richtiger Z-Reihenfolge zeichnen



## conan2 (30. Jun 2006)

Ich probiere derzeit einen Katamari-Clone zu schreiben und habe gerade das Problem, dass ich alle Objekte im Vector<Drawable>, das alle zu zeichnenden Objekte enthält, in der richtigen Reihenfolge zeichnen muss, so wie es die getZ()-Methode von meinem Drawable vorsieht.
Dazu habe ich erstmal einen Hashtable mit den Z-Koordinaten als Key und den Indizes der Drawable-Objekte als Value befüllt. Danach habe ich ein Array mit den Z-Koordinaten erstellt und diese dann sortiert. Jetzt kann wenn ich das Array durchlaufe und die daraus resultierenden Z-Werte beim Vector als Key benutzen um die Indizes in der gewünschten Reihenfolge erhalten.
So weit, so gut, die Probleme treten erst dann auf wenn es mehrere Objekte mit den selben Z-Koordinaten im dem Hashtable gibt. Dann erhalte ich öfters dasselbe Objekt wenn ich dieselbe Z-Koordinate als Key benutze. Deswegen will ich versuchen das Key-Value-Paar aus dem Hashtable zu entfernen nachdem ich es ausgelesen habe. Das wollte ich mit der Hashtable.remove(key)-Methode machen, habe aber dann festgestellt, dass alle Paare mit dem angegebenen key entfernt werden. Gibt es also eine Methode, ein Paar zu entfernen, wenn man den Value desselben kennt? Denn Values können in meinem Hashtable keine doppelt vorkommen!


----------



## Beni (30. Jun 2006)

Ordne deinen Array doch direkt nach der Z-Koordinate:

```
Drawable[] array = vector.toArray( new Drawable[ vector.size() ]);

Arrays.sort( array, new ZComparator() );

... // zeichnen
```


```
public class ZComparator implements Comparator<Drawable>{
  public int compare( Drawable a, Drawable b ){
    int az = a.getZ();
    int bz = b.getZ();
    return az - bz; // kleine z sind weiter oben
  }
}
```

"Arrays" findest du im Package "java.util", und wie sort, bzw. der Comparator funktioniert, liest du am besten in der API nach.


----------



## conan2 (30. Jun 2006)

Gah... Warum hab ich nur gewusst dass es sicher irgendeine einfache Lösung gibt? >.<
Liegt wahrscheinlich daran, dass ich noch nie einen Comparator verwendet hab...
Jedenfalls vielen herzlichen Danke für diese Lösung, ich war schon der Verzweiflung nahe^^


----------

