Autor Beitrag
$ebbi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: So 31.10.10 20:36 
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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 31.10.10 20: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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: So 31.10.10 20:50 
tut mir leid aber versteh jetzt nicht ganz was ich machen soll ???
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: So 31.10.10 21:12 
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
Hat jemand eine ellegantere aber auch einfache (behersche eigentlich nur die Grundlagen) Lösung?
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
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: So 31.10.10 21:21 
user profile iconGerd Kayser hat folgendes geschrieben Zum zitierten Posting springen:
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
Hat jemand eine ellegantere aber auch einfache (behersche eigentlich nur die Grundlagen) Lösung?
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


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
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 08.11.10 22:45 
Ebenfalls Danke
rushifell
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 306
Erhaltene Danke: 14



BeitragVerfasst: Do 25.11.10 09: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