HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Falról visszapattanó labda algoritmusa


Példaprogram letöltése

3576 bájt

Bizonyára mindenki számára ismerős játék, mikor egy labda pattog az oldalfalak között. Jelen esetben a falakat a Form kliens területe jelenti. Amikor a labda valamelyik falhoz ér, irányt vált és halad tovább mindaddig, amíg újabb falhoz nem ér.

A program futása közben méretezze át a Form-ot!
A labda mozgatására egy TTimer komponenst használunk. Mikor ennek OnTimer eseménye fut, akkor változtatjuk a labda aktuális helyzetét. A labda pozícióját az FBallPosition változó tárolja, míg a lépésköz mértékét és irányát az FBallMotion változó. A következő lépéshez csak hozzáadjuk ez utóbbi változó értékét az FBallPosition-hoz.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  FBallPosition.x:=FBallPosition.x+FBallMotion.x;
  FBallPosition.y:=FBallPosition.y+FBallMotion.y;
Ezt követően kell ellenőriznünk, hogy az új érték még az adott területen belül van-e, vagy már nem. Az ellenőrzésnél figyelembe kell vennünk a labda méretét is, melyet a BallSize konstans tárol.
Az ellenőrzés négy érték vizsgálatból áll, mely a labda helyzetét összehasonlítja a fal helyzetével. Abban az esetben, ha labda elérte valamelyik falat, akkor a lépés irányát megváltoztatjuk, így következő OnTimer-nél már másik irányban halad tovább a labda.
  if (FBallPosition.x>ClientWidth-BallSize) then begin
    FBallMotion.x:=-Abs(FBallMotion.x)
  end else begin
    if FBallPosition.x<0 then begin
      FBallMotion.x:=Abs(FBallMotion.x);
    end;
  end;
  if (FBallPosition.y>ClientHeight-BallSize) then begin
    FBallMotion.y:=-Abs(FBallMotion.y)
  end else begin
    if FBallPosition.y<0 then begin
      FBallMotion.y:=Abs(FBallMotion.y);
    end;
  end;
Végső lépésként gondoskodunk a labda új helyre történő kirajzolásáról, melyet a DrawScreen eljárásunk végez.
  DrawScreen;
end;
A DrawScreen eljárás a belső FScreen bitmap-re rajzolja ki a labdát jelképező kört, majd ezt a bitmap-et rajzoljuk ki a Form-ra, a Canvas osztály Draw eljárásával.
procedure TForm1.DrawScreen;
begin
  with FScreen.Canvas do begin
    Brush.Color:=clBlack;
    FillRect(ClientRect);
    Brush.Color:=clwhite;
    Ellipse(FBallPosition.x, FBallPosition.y, FBallPosition.x+BallSize, FBallPosition.y+BallSize);
   end;
   Canvas.Draw(0, 0, FScreen);
end;
Figyelnünk kell a Form átméretezését is. Ekkor a FSreen bitmap-ünk méretét a Form aktuális méretéhez kell igazítanunk.
procedure TForm1.FormResize(Sender: TObject);
begin
  FScreen.Height:=ClientHeight;
  FScreen.Width:=ClientWidth;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3643DelphiFormEditor1. rész
3689DelphiProject és modul információk2. rész
3719DelphiMegnyitás, mentés3. rész
3749DelphiKódszerkesztő4. rész
3778DelphiForráskód írása, olvasása5. rész
3809DelphiInterfész a kódszerkesztő ablakhoz6. rész
3839DelphiKijelölt blokkok7. rész
3869DelphiA buffer beállításai8. rész
3899DelphiKörnyezeti és Project opciók9. rész
3929DelphiKurzor a kódszerkesztőben10. rész
3959DelphiKeresés és csere beállításai11. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 638. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |