hiho ich habe einen ball erstellt der in einem image fallengelassen werden soll und dann ander unteren kante abprallen soll... dannach soll er wenn er die ausgangshöhe ( mitte des image) wieder herunterfallen) das ganze wird durch einen timer gemacht (interval 3). mein problem ist, dass ich nicht weiß, wie ich das machen soll, da es mit if abfrage nicht so ohne weiteres geht. vielleicht weiß ja jemand wie man so einen springenden ball proggen kann.
Delphi-Quellcode:
TBall = class
Farbe:TColor;
Radius:Integer;
Ortx,Orty:Integer;
vx,vy:Real;
procedure zeichnen;
procedure fallenlassen;
procedure werfen;
procedure rollen;
procedure initialisieren;
end;
var
FormBall: TFormBall;
DemoBall:TBall;
implementation
{$R *.DFM}
(*********************************************************)
procedure TBall.zeichnen;
begin
with FormBall.ImageSpielfeld.Canvas do
begin
Brush.Color := Farbe;
Ellipse(Ortx-Radius,Orty-Radius,
Ortx+Radius,Orty+Radius);
pen.color := clblack;
end;
end;
(*********************************************************)
procedure TBall.fallenlassen;
begin
FormBall.TimerBewegung.Enabled:=true;
end;
(*********************************************************)
procedure TBall.werfen;
begin
end;
(*********************************************************)
procedure TBall.rollen;
begin
end;
(*********************************************************)
procedure TBall.initialisieren;
begin
Radius:=10;
Farbe:=clred;
Ortx:=FormBall.ImageSpielfeld.Width div 2;
Orty:=FormBall.ImageSpielfeld.Height div 2;
vx:=0;
vy:=0;
end;
(*********************************************************)
procedure TFormBall.FormCreate(Sender: TObject);
begin
DemoBall:=TBall.create;
DemoBall.initialisieren;
end;
(*********************************************************)
procedure TFormBall.ButtonSpielfeldClick(Sender: TObject);
begin
FormBall.ImageSpielfeld.Canvas.Brush.Color:=clwhite;
FormBall.ImageSpielfeld.Canvas.pen.Color:=clwhite;
timerbewegung.enabled := false;
with DemoBall do
begin
farbe := clwhite;
zeichnen;
initialisieren; //Ball wieder auf Ursprung zurücksetzten
end;
end;
(*********************************************************)
procedure TFormBall.ButtonZeichnenClick(Sender: TObject);
begin
DemoBall.zeichnen;
end;
(*********************************************************)
procedure TFormBall.ButtonFallenlassenClick(Sender: TObject);
begin
DemoBall.fallenlassen;
end;
(*********************************************************)
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;
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;
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;
end;{with do}
end;
(*********************************************************)
end.