2 Androidspezifische Fragen..

Robokopp

Bekanntes Mitglied
Hallo

ich bin dabei ein Spiel für Android zu Entwickeln.

Die Darstellung der Spielelemente erfolgt über Canvas(Derzeit nur Rechtecke).Meine Bilddateien liegen im drawable Ordner.

Wie kann ich nun diese Bilder als Bitmap auf das Canvas zeichnen?
Ich würde gerne in meiner GameActivityklasse, welche von View erbt, die Bilddaten einlesen und dann an die jeweiligen Objektinstanzen übermitteln, wo sie in der onDraw Methode gezeichnet werden sollen.
Die Bilder sollen skalierbar und logischerweise auch frei positionierbar sein.
Bis auf Crashes hab ich hier noch nichts erreicht.Offenbar hab ich falsch konvertiert von Drawable zu Bitmap.
2. Frage:

Ich habe eine onPause Methode in der Klasse, die meinen View aufruft.Hier pausiere ich per boolean sowohl alle Canvasoperationen, als auch die Logik.Das funktioniert perfekt.
Jedoch bekomme ich trotz pausiertem Spiel eine CPU Auslastung von 47-49% angezeigt.Das einzige, was währen dem pausieren weiterläuft, ist die Whileschleife(ohne Methodenaufrufe) in der GameLoop, die eigentlich nicht für die Auslastung verantwortlich sein kann.

Kleiner Zusatz:

Ich habe mich noch nicht mit Handlern befasst.Folglich verwende ich auch keine(nur falls es damit zusammenhängen könnte)
 
N

nillehammer

Gast
Jedoch bekomme ich trotz pausiertem Spiel eine CPU Auslastung von 47-49% angezeigt.Das einzige, was währen dem pausieren weiterläuft, ist die Whileschleife(ohne Methodenaufrufe) in der GameLoop, die eigentlich nicht für die Auslastung verantwortlich sein kann.
Doch, es ist erstaunlich (eigentlich nicht, wenn man drüber nachdenkt), aber eine Endlosschleife ohne Kommandos belastet die CPU erheblich. Da helfen nur Thread.sleeps. Vergleiche mal die CPU-Auslastung bei folgenden Codeabschnitten, in dem Du jeweils einen auskommentierst und dann per top/Taskmanager/o.ä. die CPU-Last des java-Prozesses anschaust:
Java:
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Throwable {

		while(true) {
			// do nothing		
                          }

		while(true) {
			Thread.sleep(10);
		}

	}
 
Zuletzt bearbeitet von einem Moderator:

Network

Top Contributor
Was bereits nillehammer sagte, die hohe CPU-Auslastung kommt daher, da das Programm ja trotzdem ununterbrochen eine Schleife ausführt. Also Code. Zwar berechnet es keine großen Rechenoperationen, dafür aber winzige so oft, dass diese Berechnungen wiederum an große Rechenoperationen herankommen ;)

Wegen fehlendem Code und der berühmten Glaskugel die in der Reparatur ist, kann ich auch nicht sagen, was genau du an deinem Code falsch machst. Weil wir ihn nicht sehen können ;)

Ich vermute aber mal du machst sowas ähnliches wie (Pseudocode)
Java:
while(true) {
     if( !pause ) {
     }
     else {
          Thread.sleep(100);
     }
}

Das wäre die falsche Herangehensweise! Bzw. falsch ist so ein böses Wort, es ist aber nicht gerade sinnbehaftet. ;)

Hier solltest du Events nutzen, im Sinne von:
Java:
Thread.wait();
Thread.notify();
Oder eben (und das ist die standartisierte Herangehensweise):
Beim Verlassen, den Thread komplett beenden, und bei onResume einen neuen Thread starten. Ist ja nicht so schwer ;)

Gruß
Network
 

Robokopp

Bekanntes Mitglied
Deine glaskugel hat recht obwohl sie in Reparatur ist :D

Wenn ich allerdings den Thread terminiere, und einen neuen starte,fängt das Spiel normalerweise von vorne an. hmm..
Aber gut danke. Das mit den events werde ich mal versuchen
Gesendet von meinem GT-I9100 mit Tapatalk
 

Robokopp

Bekanntes Mitglied
Ah vlt noch eine frage ^^ ich hab den spielebereich auf fullscreen gesetzt. Leider sieht man oben am Rand ganz schwach die Android leiste. Ist das normal?
Ich hoffe das sieht man auf dem Bild.
50bb67b7-e511-dfc0.jpg


Gesendet von meinem GT-I9100 mit Tapatalk
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
thor_norsk Allgemeine Fragen Android & Cross-Platform Mobile Apps 21
OnDemand Allgemeine Fragen zu einer App Android & Cross-Platform Mobile Apps 4
W Feedback zur eigenen App + paar Fragen Android & Cross-Platform Mobile Apps 10
W Mobiler Einkaufszettel - allgemeine Fragen Android & Cross-Platform Mobile Apps 25
J ein paar Fragen zu Netzwerkverbindungen Android & Cross-Platform Mobile Apps 5
B Android Fragen zu PopupWindow? Android & Cross-Platform Mobile Apps 1
B Android Fragen zu AndEngine? Android & Cross-Platform Mobile Apps 2
B Fragen zum Speichern einer Datei auf dem Gerät? Android & Cross-Platform Mobile Apps 7
B Android Fragen zu einfache Web-Chat? Android & Cross-Platform Mobile Apps 1
B Android Fragen zu Density? Android & Cross-Platform Mobile Apps 1
B Android Fragen zu SoundPool? Android & Cross-Platform Mobile Apps 4
B Android Fragen zu ViewPager? Android & Cross-Platform Mobile Apps 0
B Android Fragen zu Facebook-SDK? Android & Cross-Platform Mobile Apps 4
B Fragen zu Arrays? Android & Cross-Platform Mobile Apps 9
B Fragen zu Youtube API? Android & Cross-Platform Mobile Apps 2
B Fragen zu onLongClick? Android & Cross-Platform Mobile Apps 2
B Fragen zu Moto Race Game? Android & Cross-Platform Mobile Apps 7
P Android Fragen reihenfolge speichern / laden Android & Cross-Platform Mobile Apps 2
Gossi Android Gossis Android Fragen Thread Android & Cross-Platform Mobile Apps 3
S Anfänger Setup Fragen Android & Cross-Platform Mobile Apps 10
J Projekt: Mobile Endsysteme Fragen Android & Cross-Platform Mobile Apps 2
G Fragen zur Midlet Signierung Android & Cross-Platform Mobile Apps 2
B RecordStore >Fragen zu deleteRecord ? Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen


Oben