AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ball abprallen

Ein Thema von furby · begonnen am 22. Nov 2005 · letzter Beitrag vom 22. Nov 2005
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz