Ich muss einmal kurz etwas zur Spieleentwicklung auf Android schreiben. Mittlerweile gibt es dort ein gutes Angebot, das sich keinesfalls hinter dem für das iPhone verstecken muss. Wer bereit ist für ein Spiel ein paar Cent/Euro hinzulegen, der bekommt sehr gute Unterhaltung. Aber mir geht es hier nur um den technischen Aspekt.
Ich habe selbst ein wenig experimentiert und ein normales Spiel hat bekanntlich ein bisschen Menü Logik und dann das Spiel selbst, das in einer so genannten „Game Loop“ so schnell wie möglich ausgeführt wird. Und hier scheint es meiner Meinung nach ein Problem zu geben. Denn 1) gibt es sowieso ein Framelimit, d.h. mehr als 60 fps stellen zumindest weder das Nexus S noch das neue Galaxy Nexus dar. Und 2) wird so gut wie überhaupt nicht auf sparsamen Umgang mit dem Akku geschaut.
Die beiden Punkte hängen ein wenig zusammen und das Problem ist die genannte „Game Loop“. Die sorgt dann nämlich für eine CPU-Auslastung von 100%, egal wie wenig auch passiert. Hat man sein Gerät gerootet, kann man die Taktgeschwindigkeit weiter heruntersetzen und merkt bei den meisten Spielen auf einem schnellen Android überhaupt gar keinen Unterschied, außer dass es sehr viel weniger heiß wird.
Besonders erschreckend wird das bei Spielen, die eigentlich rundenbasiert sind und in jedem Schleifendurchlauf eigentlich nur die Grafik aktualisiert wird und auf Eingaben gewartet wird, z.B. bei Great Little War Game. Früher machte eine solche Programmierung Sinn, aber mit dem Framelimit und immer schneller werdenden Smartphones? Sollte man da nicht auch ein wenig auf den Akku achten? Oder zumindest die Hände der Spieler? Im Winter ist es ja noch ok ein 50° warmes Smartphone in den Händen zu halten, aber im Sommer? Zumal das auch den Ladevorgang des Akkus beendet falls man an der Steckdose hängt, da ein Laden bei dieser Temperatur nicht gut ist.
Wollte ich nur mal geschrieben haben.
Anbei noch der Verlauf einer Akku Entladung, gefolgt von einer Aufladung über den Zeitraum von 5 Stunden. Erkenntnis: bei hellem Display und voller Auslastung kann die Ladeelektronik gerade so mit dem Verbrauch mithalten. Stimmt natürlich nicht ganz, da bei niedriger Spannung deutlich mehr Strom in den Akku fließen darf und kann als in der Nähe der 100% Marke, aber im Prinzip stimmt das schon … ich habe schon beobachtet wie trotz angeschlossenem Ladegerät die Prozentanzeige sinkt ;-)
Kommentare
12 Antworten zu „Spieleentwicklung auf Android“
Sollte aber eigentlich kein Problem sein eine Bremse einzubauen. Soweit ich weiß kann man die Framerate vom Gerät abfragen. Wenn es einen Timer gibt der genau genug ist sollte das doch gehen.
Gehts nicht oder macht das einfach niemand?
Ich denke es macht kaum jemand. Man müsste ja noch nicht einmal die Framerate vom Gerät abfragen, sondern lediglich auf eine bestimmte Framerate abzielen. Das können von mir aus auch die 60 FPS sein … je nach Spiel.
Was für ein Gerät mit Android hast du denn und hast du selbiges auf gerootet?
Steht im zweiten bzw. dritten Absatz. Nexus S und Galaxy Nexus und natürlich gerootet. Dazu noch ein Tablet von Acer …
Ah okay, habe ich wohl überlesen. *arg*
Aber nur mal so aus reinem Interesse, wozu hast du gleich 2 Smartphones? Eines zum basteln und eines zum nutzen, oder wie? ;)
So ähnlich … Softwareentwicklung. Momentan habe ich sogar zwei Galaxy Nexus ;-) aber nur weil eines einen Defekt hatte und ich das defekte erst in 2 Wochen zurücksenden muss …
Aha und was tust du feines an Software basteln?
Was immer du willst ;-)
Das Framerate-Limit sorgt aber (zumindest bei meinem Android-Tablet) dafür, dass der GameLoop auch nur mit 60FPS läuft. Daher sollte man damit die CPU nicht komplett auslasten. Es sei denn natürlich die CPU kann sowieso nicht mehr berechnen.
Ich habe es gerade nochmal mit SetCPU getestet. Die Auslastung beträgt zumindest bei GLWG (das Spiel vom Artikel) 50%. Damit meine ich, dass zur Hälfte der Zeit die CPU auf 1200 MHz steht und sonst bei 350 MHz Däumchen dreht.
Das kann man so deuten, dass ein Kern komplett ausgelastet wird (zumindest so weit, dass er mit der höchsten Taktfrequenz laufen muss) oder sich das irgendwie verteilt (ab und zu 1200 MHz und mehrere Kerne, letzteres wohl unwahrscheinlich bei einem solchen Spiel). Wie das mit der GPU aussieht, wüsste ich auch noch gerne ;-)
Wenn man die CPU auf 350 MHz zwingt läuft das Spiel übrigens nicht merklich langsamer, das Handy bleibt aber kühler. Also muss doch irgendwas dran sein, an meiner Theorie, dass dieses Spiel unnötig viel Akku verbraucht. Wie auch immer es das macht?
Wo kann man denn die CPU-Auslastung sehen? (Android 3.2)
Mittels SetCPU auf einem gerooteten Gerät. Zeigt zwar nicht die Auslastung direkt an, aber wie lange seit dem letzten Neustart die CPU mit welcher Frequenz gearbeitet hat.
Auf 4.x gibt es in den Entwickleroptionen noch ein Overlay für die Auslastung. Zeigt allerdings nur „load“ an.