Delphi-Quellcode:
procedure TFormBall.TimerBewegungTimer(Sender: TObject);
begin
with DemoBall do
begin
if Orty + Radius < FormBall.ImageSpielfeld.Height
then begin
FormBall.ImageSpielfeld.Canvas.pen.Color:=clwhite;
farbe := clwhite; //Löschen
zeichnen; //Übermalen
farbe := clred; //Farbe zurücksetzen
FormBall.ImageSpielfeld.Canvas.pen.Color:=clblack;
vy:=vy+1; {Erhöhung von vy, wobei eine Einheit
willkürlich angenommen wurde}
Orty:=Orty+round(vy*TimerBewegung.Interval);
{neuerOrt:=alterOrt + Wegzunahme}
zeichnen;
end;
///hier gehört ein GRÖSSERGLEICH hin.
if Orty + Radius >= FormBall.ImageSpielfeld.Height
then begin
FormBall.ImageSpielfeld.Canvas.pen.Color:=clwhite;
FormBall.ImageSpielfeld.Canvas.Brush.Color:=clwhite;
FormBall.ImageSpielfeld.Canvas.ellipse(Ortx-Radius,Orty-Radius,Ortx+Radius,Orty+Radius);
FormBall.ImageSpielfeld.Canvas.pen.Color:=clblack;
//Wenn du schon am Boden angekommen bist, willst du nicht mehr beschleunigen.
{vy:=vy+1;}
////////////////////so, jetzt muss der Ball ja abprallen. Das machst du so:
vy:=-vy; //die Y-Geschwindigkeit muss ja umgekehrt werden.
zeichnen;
end;
end;{with do}
end;
edit:
GRAUENHAFTE Einrückung...
außerdem sieht mir das ziemlich nach Info-Hausaufgabe aus. Nur da wird alles so
kleinlichst in Klässchen aufgeteilt und benannt.
Bei mir würde das soaussehen:
Delphi-Quellcode:
procedure TFormBall.TimerBewegungTimer(Sender: TObject);
begin
with Ball do
begin
if Orty + Radius < Form1.Image1.Height
then begin
Form1.Image1.Canvas.pen.Color:=clwhite;
farbe := clwhite;
zeichnen;
farbe := clred;
Form1.Image1.Canvas.pen.Color:=clblack;
vy:=vy+1;
zeichnen;
end else begin
Form1.Image1.Canvas.pen.Color:=clwhite;
Form1.Image1.Canvas.Brush.Color:=clwhite;
Form1.Image1.Canvas.ellipse(Ortx-Radius,Orty-Radius,Ortx+Radius,Orty+Radius);
Form1.Image1.Canvas.pen.Color:=clblack;}
zeichnen;
vy:=-vy;
zeichnen;
end;
end;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates