Entwickler-Ecke
Multimedia / Grafik - Auf Hintergrundbild zeichnen
$ebbi - So 31.10.10 19:36
Titel: Auf Hintergrundbild zeichnen
Hi,
ich würde gerne eine sich im Kreis drehende Kugel auf ein Hintergrundbild zeichnen (nähere Erläuterung würde jetzt zu weit führen ;) ) Bewegung hab ich bisher immer mit Timer gemacht und dann eben die letzte Kugel immer weiß übermalt sodass sich der Gegenstand eben bewegt. Hier ist das aber schlecht möglich, da sich dann ja eine weiße Kugel-linie durchs Bild zieht. Also lad ich halt immer wieder das Bild neu. Das funktioniert auch ganz passabel aber es flimmert ungemein (und kostet bestimmt auch massig rechenleistung :D). Hat jemand eine ellegantere aber auch einfache (behersche eigentlich nur die Grundlagen) Lösung?
mfg $ebbi
Edit: hier noch meine aktuelle Version
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| dx:= r*sin(a/360*2*pi); dy:= r*cos(a/360*2*pi); IZeichnen.Picture.LoadFromFile('.\scheibe.bmp'); with IZeichnen.canvas do begin moveto(x0,y0); v:= x0 + trunc(dx); w:= y0 - trunc(dy); brush.color:=clyellow; pen.color:=clmaroon; ellipse (v,w,v+25,w+25); end; |
bummi - So 31.10.10 19:43
in ein Bitmap fertigmalen und das Bitmap
je nachdem wo gemalt werden soll im OnPaint malen lassen.
z.B. TGraphiccontrol oder auf Form, der Timer schickt nur noch das Invalidate wenn das malen fertig ist.
Ansonsten Doublebuffered des darunterliegenden Parents auf true setzten.
Das Hintergrundbitmap nur einmalig laden.
Bei jedem Zeichen Deinen Hilfbitmap assigned, dort per Canvas reinmalen und wie obern beschrieben, notfalls auch einen sichtbaren Image zuweisen.
$ebbi - So 31.10.10 19:50
tut mir leid aber versteh jetzt nicht ganz was ich machen soll ???
$ebbi - So 31.10.10 20:21
das hat mir mein vater schon geraden aber der hat gemeint das wäre nicht leicht und bräuchte zeit. trotzdem danke werd mich darin mal bei gelegenheit einarbeiten.
aber für dieses kleine projekt wär mir ne simple lösung lieber. hab mir sowas gedacht wie ein Image als hintergrund und ein weiteres transparentes, wo nur die kugel zu sehen ist drüber legen, wäre das nicht möglich? aber bin natürlich auch offen für andere mir verständlichen ;) methoden und jetzt schonmal vielen dank für die posts
Edit: Hat sich erledigt, ging mit Doublebuffered, stand ja oben ich Idiot, also vielen Dank für die Hilfe.
Marylin - Mo 08.11.10 21:45
Ebenfalls Danke
rushifell - Do 25.11.10 08:15
| Gerd Kayser hat folgendes geschrieben: |
Eine elegantere Lösung wäre, mit Sprites zu arbeiten. Einfach ist es zwar nicht, aber hier findest Du Beispiele: delphiforfun.org/pro...niques/animation.htm
Und hier sind die Grundlagen dazu: delphiforfun.org/pro...ques/maskdrawing.htm |
Dazu habe ich noch eine Frage. Ich verstehe nicht, wofür der Schatten des Ballons gezeichnet wird. Geht es damit schneller?
Ich speichere stets den entsprechenden rechteckigen Bereich des Hintergrundbildes und scanne dann das zu zeichnende Tile/Bild (im Beispiel den Ballon). Wenn beim Scannen (mit Scanline) die Farbe die transparente ist (also z.B. schwarz oder grau), so wird kein Pixel auf das Hintergrundbild gesetzt, ansonsten wird ein Pixel gesetzt. Im nächsten Frame überzeichne ich einfach das gesetzte Tile wieder mit dem zuvor gespeicherten Bereich des Hintergrundbildes.
Wenn möglich, nutze ich jedoch meist die Unterstützung von transparenten Farben.
Gruß rushifell
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!