Unterschiedliche Ausführgeschwindigkeit...

  • 3 Antworten
  • Letztes Antwortdatum
S

Schw4nzusLongus

Neues Mitglied
0
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
 
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.
 
  • Danke
Reaktionen: Schw4nzusLongus
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.
 
  • Danke
Reaktionen: Schw4nzusLongus
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
 

Ähnliche Themen

M
Antworten
10
Aufrufe
884
maksimilian
M
T
Antworten
0
Aufrufe
593
tim1602
T
Zurück
Oben Unten