onTouch Performance

  • Antworten:4
Hannes Kostner
  • Forum-Beiträge: 2

12.01.2013, 19:00:29 via Website

Hallo,
ich habe bei einem Breakout-Spiel eine bar welche über onTouch neu positioniert wird. Das Event reduziert die FPS merklich. Gibt es eine bessere Möglichkeit zur Positionierung des Sprites als untenstehende.
Gruß, Hannes

1bar = new Sprite(BitmapFactory.decodeResource(context.getResources(), R.drawable.bar));
2
3public void onTouch(MotionEvent event) {
4 if(bar != null)
5 {
6 if (bar.x + (bar.getWidth()/2)> (int) (event.getX()))
7 bar.x = bar.x - 8;
8 else if (bar.x + (bar.getWidth()/2) < (int) (event.getX()))
9 bar.x = bar.x + 8;
10 }
11}

Antworten
Jan M.
  • Forum-Beiträge: 36

12.01.2013, 19:32:40 via Website

abgesehen von ein paar kleineren änderungen die du machen könntest, fällt mir erstmal nix auf, was performance frisst. bist du mal mit dem debugger durchgegangen und hast geguckt, wo der lange braucht von einem schritt zum anderen? oder hast du mal die DDMS View zur analyse der performance der app verwendet?

Antworten
Jan M.
  • Forum-Beiträge: 36

12.01.2013, 19:37:26 via Website

Hannes Kostner
Hallo,
ich habe bei einem Breakout-Spiel eine bar welche über onTouch neu positioniert wird. Das Event reduziert die FPS merklich. Gibt es eine bessere Möglichkeit zur Positionierung des Sprites als untenstehende.
Gruß, Hannes

1bar = new Sprite(BitmapFactory.decodeResource(context.getResources(), R.drawable.bar));
2
3public void onTouch(MotionEvent event) {
4 if(bar != null)
5 {
6 if (bar.x + (bar.getWidth()/2)> (int) (event.getX()))
7 bar.x = bar.x - 8;
8 else if (bar.x + (bar.getWidth()/2) < (int) (event.getX()))
9 bar.x = bar.x + 8;
10 }
11}

ungetestet:

1bar = new Sprite(BitmapFactory.decodeResource(context.getResources(), R.drawable.bar));
2
3public void onTouch(MotionEvent event) {
4 if(bar != null) {
5 boolean var = bar.x + (bar.getWidth()/2)> (int) (event.getX());
6
7 bar.x = var ? bar.x - 8 : bar.x + 8;
8}
9}

— geändert am 12.01.2013, 19:41:59

Antworten
Hannes Kostner
  • Forum-Beiträge: 2

13.01.2013, 17:39:24 via Website

ohne onTouch Events 80fps, mit 55fps. Können die Events reduziert werden, die bar ruckelt aktuell auch einwenig.

Antworten
Jan M.
  • Forum-Beiträge: 36

13.01.2013, 23:08:48 via Website

prüf doch einfach mal, wie oft und von wem das touch event aufgerufen wird. könnte ja sein, dass da was rekursiv aufgerufen wird oder das event aufgrund einer schleife dauernd gefeuert wird, was evt. nicht sein muss. mit deinem codeschnipsel kann man schlecht eine performanceanalyse machen.

wobei ja 55fps mehr als ausreichend sind ;). da könnteste ja die fps skalierbar machen. wenn ein phone genug performance hat, muss es ja nicht unbedingt 80fps liefern.

Antworten