Thread sperrt onTouchEvent(MotionEvent event)

  • Antworten:4
Duckemai
  • Forum-Beiträge: 63

30.06.2011, 17:54:11 via Website

Hallo zusammen,

ich progge derzeit mein erstes Spiel.
Dafür habe ich einen Thread, der zB die onDraw aufruft. Hier wird aber auch die GameLoop behandelt. Das heißt, dass wenn
das Spiel auf einem schnellen Smartphone läuft, wird es für kurze Zeit in den Thread.sleep gelegt, damit ich eine ungefähre gleichbleibende Geschwindigkeit des Spiels erhalte. Dadurch entsteht aber ein großes Problem. Bei sehr schnellen Smartphones ist die Sleep so lange, dass das Spiel bei Start einfriert. Es ist dann über die Bildschirmberührung per onTouchEvent nicht mehr erreichbar. Wenn ich ein paar mal drauf rumdrücke, und dann einen Zeitpunkt ausserhalb des Sleep erwische, läuft das Spiel. Und zwar ohne weitere Unterbrechungen. Das Problem scheint nur beim Start aufzutreten.

Ich habe schon per:

public boolean onTouchEvent(MotionEvent event) {
synchronized (getHolder()) {
thread.interrupt();
...

...einen Interrupt ausgelösen. Der wird aber erst gar nicht erreicht.

Weiß jemand, wie man so was handelt? Dass also die Sleep im Thread nicht die onTouchEvent blockiert?

Vielen Dank
Duckemai

Antworten
Markus B.
  • Forum-Beiträge: 636

30.06.2011, 19:09:39 via App

Hi,
wenn du das onSleep im GUI-Thread ausführst kann das onTouchEvent einfach nicht funktionieren. Du solltest noch mal von ganz vorne mit der Überlegung starten. Schnelle Handys künstlich ausbremsen halte ihr für eine schlechte Idee...

Gruß,
Markus

Duckemai

Antworten
Duckemai
  • Forum-Beiträge: 63

01.07.2011, 11:56:30 via Website

Ist es denn nicht die gängige Methode, so zu verfahren?
Also die langsamen Systeme durch überspringen der doDraw() zu beschleunigen, also nur z.B. die updatePhysics abzuarbeiten.
Dafür die schnellen Systeme kurzzeitig in den Schlaf zu versetzen?

Kennst Du ein gutes Tutorial, wo ein besserer Ansatz zu finden ist?

— geändert am 01.07.2011, 11:56:57

Antworten
Duckemai
  • Forum-Beiträge: 63

01.07.2011, 16:12:30 via Website

Coooole Idee. Eines Lebowskis würdig ;-)

Antworten