R
Rul3r
Neues Mitglied
- 0
Hi,
ich entwickle gerade ein kleines Spiel auf OpenGL-Basis. Nun bin ich an die Eingabe gekommen. Ich will, dass solange man den Bildschirm berührt etwas gemacht wird. Dabei bin ich aber auf ein Problem gestoßen.
Ich dachte ich löse das wie folgt:
Dieser Code steht in in der MainActivity. Solange man mit dem Finger auf dem Bildschirm ist, werden die Koordinaten der Berührposition an meine Spielklasse übergeben. Wenn man den Finger wieder vom Bildschirm nimmt, wird die Endlosschleife abgebrochen und der Thread beendet.
Auf meinem Galaxy S3 läuft das auch so wie es soll und frisst auch nicht zu viel Leistung. Auf einem Nexus 4 fallen die FPS von 60 auf 30 sobald man den Bildschirm berührt. Nehm ich den Thread raus, dann läuft es auch auf dem Neux 4 flüssig.
Ich vermute mal es liegt an der Endlosschleife im Thread
Jetzt weiß ich allerdings nicht warum die FPS auf dem Nexus 4 so einbrechen, könnte mir aber vorstellen, dass es auf schwächeren handys noch schlimmer ist. Ich bräuchte also eine Alternative zu der Endlosschleife.
Den Thread 20ms schlafen legen und dann weiterlaufen lassen, bringt etwas mehr Leistung, allerdings könnten mir dann Eingabekoordinaten verloren gehen, was vielelicht zu unerwarteten Dingen führen könnte.
Gibt es eine andere Möglichkeit solange man den Bildschirm beührt etwas zu machen und dies dann zu stoppen, wenn man den Bildschirm nicht mehr berührt?
Über Tipps und Hilfestellungen wäre ich dankbar
ich entwickle gerade ein kleines Spiel auf OpenGL-Basis. Nun bin ich an die Eingabe gekommen. Ich will, dass solange man den Bildschirm berührt etwas gemacht wird. Dabei bin ich aber auf ein Problem gestoßen.
Ich dachte ich löse das wie folgt:
PHP:
@Override
public boolean onTouchEvent(MotionEvent event) {
touchX = event.getX();
touchY = event.getY();
move_action = event.getAction();
if (move_action == MotionEvent.ACTION_DOWN) {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
game.setInputCoordinates(touchX, touchY);
if (move_action == MotionEvent.ACTION_UP) {
break;
}
}
}
}).start();
}
return super.onTouchEvent(event);
}
Auf meinem Galaxy S3 läuft das auch so wie es soll und frisst auch nicht zu viel Leistung. Auf einem Nexus 4 fallen die FPS von 60 auf 30 sobald man den Bildschirm berührt. Nehm ich den Thread raus, dann läuft es auch auf dem Neux 4 flüssig.
Ich vermute mal es liegt an der Endlosschleife im Thread

Jetzt weiß ich allerdings nicht warum die FPS auf dem Nexus 4 so einbrechen, könnte mir aber vorstellen, dass es auf schwächeren handys noch schlimmer ist. Ich bräuchte also eine Alternative zu der Endlosschleife.
Den Thread 20ms schlafen legen und dann weiterlaufen lassen, bringt etwas mehr Leistung, allerdings könnten mir dann Eingabekoordinaten verloren gehen, was vielelicht zu unerwarteten Dingen führen könnte.
Gibt es eine andere Möglichkeit solange man den Bildschirm beührt etwas zu machen und dies dann zu stoppen, wenn man den Bildschirm nicht mehr berührt?
Über Tipps und Hilfestellungen wäre ich dankbar