Canvas - XML Layout malen

  • Antworten:10
Maximilian O
  • Forum-Beiträge: 990

26.09.2011, 17:09:55 via Website

Hey Leute,
in meinem Spiel habe ich einen Canvas, um Objekte sich bewegen zu lassen.
Nun muss ih diese alle 15ms updaten. Daher wird auch aler BG neu gezeichnet, ergo es ruckelt.
Nun meine Idee, den Hintergrund aus einer XML Layout Datei zu laden, ist das möglich?
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

26.09.2011, 17:49:35 via Website

Hey Leute,
wäre toll von euch, wenn mir einer einen Tipp geben könnte, wie man den Hintergrund erzeugen lässt. Man kann ihn ja nicht immer neu erstellen.
MFG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

26.09.2011, 20:12:25 via Website

Kannst du ihn nicht zwischenspeichern in einer Bitmap oder so?
Lg Ansgar

Antworten
Maximilian O
  • Forum-Beiträge: 990

26.09.2011, 20:14:27 via Website

Hey Ansgar,
ja klar, ich habe ihn schon in einer Bitmap. Aber wenn ich zuviele / eine zu große Bitmap "male" ruckelt es.
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

26.09.2011, 20:25:27 via Website

Komisch,
sicher, dass das an der Bitmap liegt? Nutzt du Canvas, opengl oder eine Engine?
Ich hab da selbst zwar nicht so viel Erfahrung mit, aber eine Bitmap zeichnen und danach was anderes darüber dürfte eigentlich nicht so rechenintensiv sein..
Lg Ansgar

Antworten
L3322
  • Forum-Beiträge: 467

26.09.2011, 22:35:42 via App

kann ich mir auch nicht vorstellen das es bei einer großen bitmap ruckelt... ein bisschen Code wäre hilfreich.

"Hard work beats talent, when talent fails to work hard"

Antworten
Maximilian O
  • Forum-Beiträge: 990

27.09.2011, 16:58:09 via Website

Hey Leute,
danke schonmal, hier ist der Code meiner onDraw:
1protected void onDraw(Canvas canvas) {
2 super.onDraw(canvas);
3 canvas.drawColor(Color.WHITE);
4
5 y += 3;
6 diffY = newY - y;
7
8 canvas.drawPaint(p2);
9 canvas.drawBitmap(bg, 0, (getHeight()-bg.getHeight()), paint);
10 canvas.drawBitmap(bmp8, 0, 0, paint);
11 canvas.drawBitmap(apple, x, y, paint);
12 }

Das sieht nur zu Testzwecken so unordentlich aus :)
Sonst werden in der while Schleife nur 2 Zeiten zwischengespeichert. Da dürfte doch nichts ruckeln, oder?

//edit mit rucklen meine ich, dass es ab und zu kurz langsamer und dann wieder normal wird
MfG

— geändert am 27.09.2011, 17:13:36

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

27.09.2011, 17:29:30 via App

Hm,
dann liegt das vielleicht eher an deiner Schleife? Misst du FPS?
Lg Ansgar

Antworten
Maximilian O
  • Forum-Beiträge: 990

27.09.2011, 17:30:51 via Website

Hier ist noch der Code für den mainloop:
1while(flag)
2 {
3 now = System.currentTimeMillis();
4 diff = now-last;
5 last = now;
6
7 Log.d("max", Long.toString(diff));
8
9 try
10 {
11 canvas = myHolder.lockCanvas(null);
12 myDraw.onDraw(canvas);
13 }
14 finally
15 {
16 if(canvas != null)
17 {
18 myHolder.unlockCanvasAndPost(canvas);
19 }
20 }
21
22
23 }

Ich kann einfach nicht verstehen, warum ich, egal wie vielen Objekten immer eine Framerate von 50 habe. Ist das ok? Bin sonst deutlich höhere gewöhnt.
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

27.09.2011, 17:31:54 via Website

Ansgar M
Hm,
dann liegt das vielleicht eher an deiner Schleife? Misst du FPS?
Lg Ansgar
Habe eben gleichzeitig mit dir was geschrieben, siehe oben. :)
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
L3322
  • Forum-Beiträge: 467

27.09.2011, 20:05:37 via Website

Könnte maximal an der Garbage Collection liegen.
Versuche alle Objekte bei start zu erzeugen und während des Spiels(oder was du da machst) die Objekte wieder und wieder zu verwenden!
Hier ein Thread wo ein Haufen nützlicher Tipps drinsteht!

LG L3322

"Hard work beats talent, when talent fails to work hard"

Antworten