HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Animált Bezier görbe


Példaprogram letöltése

9279 bájt

Ebben a példában egy olyan komponenst mutatunk be, amely egy tetszőleges számú görbékből álló alakzatot mozgat, folyamatos színátmenettel.
A mellékelt példaprogram megnyitása előtt a MovingBezier.pas-ban lévő komponenst telepítenie kell a Delphi alá.

A Sections property-ben adhatjuk meg, hogy az alakzat hány görbéből fog állni. Az első görbe kezdőpontja, és az utolsó görbe végpontja egybe esik, így mindig egy zárt alakzatot kapunk. A komponens Interval és Speed property-jein keresztül tudjuk szabályozni a mozgatás sebességét. A színváltáshoz, és a pontok koordinátáinak számításához egy TTimer-t használunk, ennek időzítését állíthatjuk az Interval property-n keresztül. A Speed property-nek a koordináták kiszámításánál van szerepe. A koordináták minden lépésben csak annyi pixelnyit mozognak el a megfelelő irányba, amennyit a Speed property-ben beállítottunk.
A görbe mozgatása az Active property igazra állításával történik.

Az alakzat kirajzolásához a TCanvas osztály PolyBezier eljárását használjuk. Ennek paramétere egy tömb, amely TPoint típusú elemeket tartalmaz. A tömb elemeinek száma attól függ, hogy hány görbéből szeretnénk felépíteni az alakzatot. A legegyszerűbb eset, amikor csak egy görbét használunk fel (Sections=1), de már ebben az esetben is négy koordinátát kell megadni, vagyis egy 4 elemű tömbre lesz szükség. Az első elem a görbe kiindulópontjának koordinátája. A második elem a kiindulóponthoz tartozó kontrollpont koordinátája. A következő elem a végponthoz tartozó kontrollpont koordinátája, míg végül meg kell adni a görbe végpontjának koordinátáját. Minden további görbénél 3-3 elemre lesz szükség, mivel a következő görbe kezdőpontja, mindig az előző görbe végpontja. A szükséges elemek számát tehát a következőképpen lehet meghatározni:
p:=3*FSections+1;
Mivel a görbék száma nincs korlátozva, ezért a koordináták tárolására dinamikus tömböt fogunk használni (FPoints), aminek elemei TPoint típusúak. Az elemek számát tehát futási időben kell meghatároznunk, akkor, amikor a Sections property-nek értéket adunk:
SetLength(FPoints, p);
Miután beállítottuk az elemek számát, feltöltjük azokat véletlenszerűen előállított koordinátákkal. Minden egyes koordinátához tartozik egy irány is, ami azt mondja meg, hogy a koordináta értékét csökkenteni, vagy növelni kell-e a következő lépésben. Ezeket az irányokat szintén egy dinamikus tömbben tároljuk (FDirections), aminek elemei TPoint típusúak. Az elemek x és y mezőinek értékei 1, és -1 lehetnek, az iránytól függően. Kezdetben ezeket is véletlenszerűen választjuk ki.
A koordináták következő értékeit a DoTimer eljárásban számoljuk ki, ami az FTimer objektum OnTimer eseményének bekövetkezésekor fut le. A mozgatás elve egyszerű: a koordinátákat "pattogtatjuk" a komponens szélein. Vagyis amikor egy koordináta érték kívül esik a komponens területén, akkor megváltoztatjuk a mozgatás irányát. Ezt tesszük az összes koordinátával, kivéve az utolsót, ami mindig megegyezik az elsővel.

A mozgatáson kívül van még egy effekt amit megvalósítunk, ez pedig a szín folyamatos változtatása. Ehhez három változót használunk fel, amiben az egyes színösszetevőket tároljuk, valamint mindegyikhez 1-1 változót, ami a színváltoztatás "irányát" határozza meg. A színváltoztatás elve szintén egyszerű, összesen hat lépésben történik. Az első lépésben a piros és a kék színösszetevő értéke a maximumon van, tehát a kiinduló szín a lila. Ezután csak a következő feltételeket kell figyelni:
1. amikor a piros szín elérte a maximumot, akkor a kéket elkezdjük csökkenteni.
2. amikor a kék szín elérte a minimumot, akkor a zöldet elkezdjük növelni.
3. amikor a zöld szín elérte a maximumot, akkor a pirosat elkezdjük csökkenteni.
4. amikor a piros elérte a minimumot, akkor a kéket elkezdjük növelni.
5. amikor a kék elérte a maximumot, akkor a zöldet elkezdjük csökkenteni.
6. amikor a zöld elérte a minimumot, akkor a pirosat elkezdjük növelni.
Ha figyelmesen végigkövetjük a változásokat, akkor láthatjuk, hogy az utolsó lépésben elértünk a kiinduló állapothoz, tehát a piros és a kék szín maximumon lesz. Ekkor kezdődik minden elölről. A hat lépés alatt a következő színek fogják követni egymást: lila, piros, sárga, zöld, türkiz, kék, és megint lila. Az egyes színek a folyamatos színcsökkentés- és növelés miatt fokozatos színátmenettel követik egymást.

A kirajzolásnál nincs más dolgunk, mint a három színösszetevőből előállítani a színt, és a PolyBezier eljárással megrajzolni az alakzatot:
with Canvas do begin
  Pen.Color:=RGB(FRed, FGReen, FBlue);
  PolyBezier(FPoints);
end;


Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 457. 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 |