Bewegten Kreis darstellen
-
Hallo zusammen,
ich bin gerade an einem Projekt, das ich aus meinem Lehrbuch habe. Leider verstehe ich den Quelltext nich ganz, weshalb ich gerne euch fragen würde. Hier erstmal der Text://--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int x,y,Dicke; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { x=30; y=30; Dicke=150; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { Canvas->Ellipse(x,y,x+Dicke,y+Dicke); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { TRect Quelle, Ziel; for (int i=x-5; i<ClientWidth-Dicke-x-5; i++) { Quelle = Rect(i,y-5,i+Dicke+5,y+Dicke+5); Ziel = Rect(i+1,y-5,i+Dicke+6,y+Dicke+5); Canvas->CopyRect(Ziel, Canvas, Quelle); Sleep (10); //Bremse } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Refresh (); } //---------------------------------------------------------------------------
Der Kreis bewegt sich horizontal über das Formular. Es wird immer wieder kopiert und einen Pixel später wieder eingefügt. Was ich nicht verstehe ist, warum man von x bzw. y immer fünf addieren oder auch subtrahieren muss. Wenn ich nämlich die Zahl 5 in allen Fällen lösche, kommt total komisches Zeug heruas. Außerdem habe ich versucht, dass der Kreis sich nach unten bewegt. Das habe ich leider auch nicht hinbekommen!
Habt ihr vielleicht eine Lösung oder Hilfen für mich??
lg, freakC++
-
Schau doch einfach TRect an.
Die Koordiaten sind, deine 4 int Werte.
Ersten 2 die Startpositionen die letzten 2 die Endposititionen.Steht meines Erachtens auch in der Hilfe bzw. Doku.
-
hab ich auch schon gedacht, und durchgeführt, aber da ist totaler Schrott herausgekommen! Wozu muss ich die 5 abziehen
lg, freakC++
-
die 5 ist ein frei gewählter Wert, mit 1 gehts auch:
for (int i=x; i<ClientWidth-Dicke-x; i++) { Quelle = Rect(i-1,y,i+Dicke+1,y+Dicke); Ziel = Rect(i,y,i+Dicke+1+1,y+Dicke); Canvas->CopyRect(Ziel, Canvas, Quelle); Sleep (10); //Bremse }
Grund für diesen oder jeden anderen beliebige Wert größer 0 ist, dass sonst ein Teil des vorher definierten Kreises nicht mit ausgeschnitten/übermalt wird. D.h. das Rechteck "Quelle" muß links ein Pixel früher anfangen (-1) und rechts ein Pixel weiter aufhören (+1). Das Rechteck "Ziel" hat die gleichen Außmaße, wird aber um jeweils einen Pixel nach rechts verschoben, d.h. Links von Quelle +1 und rechts von Quelle +1.
Der Wert ist davon abhängig wie dick der Kreis gezeichnet ist.
-
Na klar1
Ich habs kapiet! Vielen Dank für eure Hilfe!!
lg, freakC++