Thema: Delphi Ball abprallen

Einzelnen Beitrag anzeigen

Benutzerbild von furby
furby

Registriert seit: 15. Sep 2005
Ort: Braunschweig
37 Beiträge
 
Turbo Delphi für Win32
 
#1

Ball abprallen

  Alt 22. Nov 2005, 13:52
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.
Fabian K
  Mit Zitat antworten Zitat