Helferklasse für Richtungsangaben

  • Themenstarter Themenstarter Shia
  • Beginndatum Beginndatum
S

Shia

Gast
Hallo zusammen!

Ich bin gerade dabei ein Spiel von C++ in Java (als Android-App) zu portieren.
Dabei gibt es Spielfelder, die verschiedene Pfeile in 8 Himmelsrichtungen haben (also mal nur nach Osten zeigend, oder mal nach Osten, Westen und Südosten zeigend..). Ich muss aber herausfinden, ob Himmelsrichtung X auf dem Spielfeld vermerkt ist.
Meine Kollegen haben das Problem in C++ mit einem String "gelöst" (wie irgendwie jedes Problem..), nur frisst das auf sonem kleinen Handy zu viele Ressourcen.
Eigentlich hätte ich es gern als Bytewert gehabt, den man dann in einen Integer umwandelt. Mit logischen Operationen findet man dann auch heraus, ob diese Richtung dabei ist. Aber damit mach ich mir das Leben wohl nur unnötig schwer?
Oder eine ArrayList mit den Himmelsrichtungen, die verfügbar sind? Wäre das ressourcensparend genug?

Wäre auch für alle anderen Ideen offen =)

liebe Grüße
Shia
 
So mal schnell aus ...... geschossen 😛:

Enums mit den Himmelsrichtungen die verfügbar sind ? Wäre das eine Lösung ? 🙂
 
Eigentlich ein enum. Aber auf Android gelten AFAIK andere Regeln (bei denen man manchmal schon ziemlich :autsch: ???:L :autsch: drinschaut). Da gibt es Talks von Koryphäen, die beinhart sagen: Joa, fields sollten am besten 'public' sein, und ... Speicherallokationen? Sollte man am besten GAR keine machen... Ein einzelnes byte könnte in diesem Fall die angebrachsteste Lösung sein. 8. In Worten: ACHT. Das drängt sich doch auf .... :reflect:
 
Das ist dem TS zu aufwändig:
Aber damit mach ich mir das Leben wohl nur unnötig schwer?
Was ich irgendwo auch nachvollziehen kann.

Klar, für Android gelten andere Regeln, aber auch diese ändern sich seit dem es DualCore Smartphones gibt.

Nachrag: Der Beitrag "Avoid Enums Where You Only Need Ints" in der Android Doku scheint verschwunden zu sein.

Designing for Performance | Android Developers
 
Zuletzt bearbeitet von einem Moderator:
Der Link hat mir echt super weitergeholfen, danke dafür! Wusste nicht, dass man da auf so vieles achten muss bei der Performance..

Ich habe nun ein boolean(8) gewählt, da ich ja auch mehrere mögliche Richtungen gleichzeitig abbilden können muss.
So wies bis jetzt ausschaut fahr ich damit auch ganz gut, Dankeschön!
 
Ich habe nun ein boolean(8) gewählt, da ich ja auch mehrere mögliche Richtungen gleichzeitig abbilden können muss.

Das kann man mit einem byte auch!
Java:
public static final byte NORTH = (byte)(1<<0);
public static final byte SOUTH= (byte)(1<<1);
public static final byte EAST= (byte)(1<<2);
...

void x()
{
    byte direction = (byte)(NORTH | SOUTH);

    if ((direction & NORTH) != 0) System.out.println("Norden"); // Wird ausgegeben
    if ((direction & SOUTH) != 0) System.out.println("Süden"); // Wird ausgegeben
    if ((direction & EAST) != 0) System.out.println("Osten"); // Wird NICHT ausgegeben

}
 

Neue Themen


Zurück
Oben