1. Schw4nzusLongus, 15.03.2011 #1
    Schw4nzusLongus

    Schw4nzusLongus Threadstarter Neuer Benutzer

    Hi,
    bin gerade dabei ein Kartenspiel-App zu programmieren.
    Ich stehe aber jetzt vor dem Problem, dass das Programm mal unheimlich schnell agiert und mal extrem träge,
    also bestimmt Faktor 10 unterschiedlich schnell (bei exakt gleichen Programmablauf).
    Es läuft praktisch so ab:
    Computer 1 schiebt Karte in die Mitte, dann Computer 2 und dann gibt Computer 3 zu.
    (Kleine Pausen zwischen den PCs lasse ich von Handlern erledigen)
    Danach wird solange gewartet, bis ich über den OnTouchlistener auch eine Karte zugebe. In der Zwischenzeit wird eigtl. nur der Hintergrund inkl. Karten "gedrawed".
    Würde ich als nicht so sehr aufwendig bezeichnen. Aber mal ises so, als würde die Karte am Finger kleben und mal zuckt sie hinterher.

    Ach ja, was mir auch noch Kopfzerbrechen bereitet,
    wie kann man sein xml-layout, dass im nachhinein per Code verändert wurde am einfachsten mit dem SharedPreferences abspeichern?
    Oder muss man wirklich alle Eigenschaften dafür auslesen?

    Und letzte Frage, wenn man das Handy dreht, was wird dann aufgerufen? onRestart? onResume?

    Wäre super, wenn mir jemand helfen könnte.

    Schon mal danke und Gruß,
    Schw4nzusLongus
     
  2. wilco, 15.03.2011 #2
    wilco

    wilco Android-Hilfe.de Mitglied

    Wenn Du das Handy drehst wird die App neu gestartet. Also wird onCreate() aufgerufen.

    Für den Ablauf Deiner App würde ich Dir die Verwendung von Threads empfehlen. Im Main-Thread, also der Anwendung an sich, bearbeitest Du die Nutzereingaben. Die Grafik-Darstellung würde ich in einen separaten Thread verlagern, die Spiel-Logik (wie z.B. die Zugberechnung beim Kartenspiel) ggf in einen dritten Thread.

    Wenn Du richtig in das Thema einsteigen möchtest kann ich Dir den folgenden Blog empfehlen.
     
    Schw4nzusLongus gefällt das.
  3. funcoder, 16.03.2011 #3
    funcoder

    funcoder Erfahrener Benutzer

    Also die gesamte Touchscreen / Steuerungs Logik bzw. deine View läuft auf jeden Fall in einem Thread. Deine Game Loop muss in einem separaten Thread laufen.
    Damit kann dein Frontend niemals mehr "einfrieren".

    Zu den Performance Problemen, was sagt dir logcat? Läuft eventuell in bestimmten Zyklen die Garbage Collection an? Die GC hat leider ziemlich hohe Laufzeiten von bis zu 300ms was die Framerate entsprechend einbrechen lässt.

    Ansonsten überprüfe mal deine Draw Methode. In der Draw Methode darf nicht ein Objekt instanziert werden. Lieber eine Klassenvariable machen und sämtlicihe Objekte (bei denen sich eh nichts ändert) einmal am Anfang instanzieren und deklarieren.
     
    Schw4nzusLongus gefällt das.
  4. Schw4nzusLongus, 18.03.2011 #4
    Schw4nzusLongus

    Schw4nzusLongus Threadstarter Neuer Benutzer

    hi,
    schon mal vielen dank.
    ich lass jetzt die view in einen eigenen thread laufen.
    o la la, läuft etz ziemlich geschmeidig.

    zum game loop:
    sowas gibts ja nicht bei mir. die computer-gegner berechnen ihre züge
    und dann wird auf meine eingabe gewartet, wozu brauch ich da ne spielschleife?
    und ich weiß auch nicht, wie ich dann da einen extra thread mit einbauen soll.

    hat jemand noch ne lösung zum abspeichern von meinem xml-layout?

    gruß,
    SL