Jump to content

DELPHI: Animācija iekš Delphi


nock
 Share

Recommended Posts

Nu tad tā. Man tūlīt no klaviatūras pogas birs! Nevaru sataisīt animāciju iekš Delphi! Taisu spēli un tur jāstaigā cilvēciņam. Par piemēru lieku savu zombiju, kaut arī tas nav spēles satāvdaļa:

zomby3.gif

 

Nu pieņemsim, ka te ir 3 kadri. Man vajag, lai nospiežot uz pogu, tas sāk kustēties. Nu lai viņš iet es izdarīt varu, bet animācija man nesanāk. Lūdzu pasakiet, kas man jādara, lai tie stulbie kadri mainītos? Man jau galīgi spēka nav domāt! Man smadzenie iestīgst šajā momentā:


procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

Case Key of

 37: if <<<Un šite es jau nezinu ko jāraksta!>>>

varbūt man vispār kautkas ir nepareizi darīts? Lūdzu palīdziet!

Link to comment
Share on other sites

Nu gan tev veciit probleemas :)))

Mhhh

Ka atteelot vienu bildi tu zini..a kaa panaakt lai ir kustiiga nespeej iedomaaties?

:)))

Link to comment
Share on other sites

Nu gan tev veciit probleemas :)))

Mhhh

Ka atteelot vienu bildi tu zini..a kaa panaakt lai ir kustiiga nespeej iedomaaties?

:)))

 

Kas smieklīgs? *.gif bildes Delphi nepieņem! A kā izdarīt, lai tās bildes mainās es tiešām nezinu! Vot pastāsti kā, tad zināšu!

Link to comment
Share on other sites

nu pasaki lai ielaadee naakamo bildi ...

kaa ta tu to pirmo dabuuji uz formas ???

pasaki imagei - lai ielaadee naakamo bildi, kur tavs zombijs jau i pakusteejies ...

Link to comment
Share on other sites

*.gif varbūt arī neņem, bet kas Tev liedz izmantot *.bmp, kas windows videi ir ļoti draudzīgs formāts?

Link to comment
Share on other sites

*.gif varbūt arī neņem' date=' bet kas Tev liedz izmantot *.bmp, kas windows videi ir ļoti draudzīgs formāts?[/quote']

Es vēl nekad neesmu redzējis animētu *.bmp :?

Tie bmp man ir. 3 kadri! Jautājums ir tāds:

Kā nospiežot pogu likt tos kadrus mainīties? T.i. Es nospiežu pogu (Nu tad sanāk ne KeyUp, bet KeyDown) un tas zombis sāk kustēties uz priekšu(to es protu) un tie zīmējumi sāk mainīties! Man vajaga paskaidrot, kā likt nepārtraukti mainīties pirmajam, otrajam un trešajam kadram pēc noteiktas secības!!!!!! Understand? Un to man jāzina pēc iespējas ātrāk! Savādāk jau galva vārās! Pats jau neko nesajēdzu... Man vajag kautko līdzīgu šitam:

Image1.Visible:=true; Image2.Visible:=false;

un tā bez apstājas

Link to comment
Share on other sites

Oho, pēc iespējas ātrāk :)

 

Tev ir TCanvas objekts. Uz šī objekta Tu vari izvadīt ko Tev vajag un kad Tev vajag. Rēķini, ka cilvēka acij pilnīgi pietiek ar 24 kadriem sekundē. Tātad Tev bilde jāmaina ne biežāk par šo vērtību. Praksē mācību nolūkos to var darīt retāk.

 

P.S. Delphi nāk līdzi tāds Samples folderītis. Tur ir paraugi, kā izvadīt attēlus uz formas.

Link to comment
Share on other sites

Oho' date=' pēc iespējas ātrāk :)

 

Tev ir TCanvas objekts. Uz šī objekta Tu vari izvadīt ko Tev vajag un kad Tev vajag. Rēķini, ka cilvēka acij pilnīgi pietiek ar 24 kadriem sekundē. Tātad Tev bilde jāmaina ne biežāk par šo vērtību. Praksē mācību nolūkot to var darīt retāk.

 

P.S. Delphi nāk līdzi tāds Samples folderītis. Tur ir paraugi, kā izvadīt attēlus uz formas.[/quote']

Uhh... bildi ielikt es protu! Un manā delphi nekāds folderītis iekšā nav gājis! T.i. man ir neoficiālā versija un nezinu kāpēs, ja instalē ar sampliem, delfiks neiet.

Link to comment
Share on other sites

Eh' date=' ka Paskālu loti ilgu laiku neesmu cilājis...

Pseidokods:

ciklasakums: Ja ir jākustās, tad turpināt, ja nav jākustās, tad iziet no cikla

Parādīt 1. kadru

pauze

Parādīt 2. kadru

pauze

parādīt 3. kadru

pauze

ietuz ciklasakums

beigas:

Tas ir tev ir 3 atsevišķas bildes, kurās katrā ir pa vienam kadram.[/quote']

Paskālā pauze saucās Delay, bet kā pauze saucas Delphi?

Link to comment
Share on other sites

Kad es taisīju dzīvnieku bara simulācijas mājas darbu, pieturējos pie pieejas: sadalīt programmu divās daļās:

1) lietotāja inputs un objektu savstarpējā mijiedarbība

2) spēles laukuma izmešana uz ekrāna

 

Ar vienkāršu ciklu problēma būs tur, ka ar laiku saradīsies daudz objektu, bet cikls neatbrīvos resursus. Pieņemu, ka mūsu koders abus HT pročus izmantot nemācēs, līdz ar to visas desmit figūriņas savu animāciju veiks secīgi nevis paralēli :)

 

Ja vēl ņem vērā, ka var rasties objektu pārklāšanās...

Link to comment
Share on other sites

Mans domaat ka dzeks nav dzimis programmists.. un diezvai pa taadu kljuus...

:O)

 

VIL: tiiri tehniski protams seciigi. tachu cilveeks to uztvers kaa paraleelas darbiibas.

Cita lieta ka shitik prasti taisot rodas probleema ka uz dazhaadiem datoriem zombiji bizo dazhaados aatrumos :)))

Link to comment
Share on other sites

Viselementaaraakais variants ir uzlikt uz formas 4 objektus timage. Trijos no tiem ielādē iekšā bildēti un uzstādi visible false.

Pieliec klāt taimeri, uzstādi kaut kādu intervālu un enabled = true. Taimera apstrādātājā raksti kaut ko šādu

  var 

i: integer;

 begin

case i of

 1: Image1.picture:= Image2.picture;

 2: Image1.picture:= Image3.picture;

 3: Image1.picture:= Image4.picture;

end;

  inc(i);

 if i >= 3 then i:=1;

 

Nu ar sho 1 min sacereeto kodu vareetu pietikt, lai ieguutu kaut kaadu raustiiigu animaaciju. Ja kaut kur truukst kaadi ; vai end; , tad saliec pats.

Link to comment
Share on other sites

Shaadas lietas parasti dara ar Taimeri. Ja to visu ieliks ieksh pogas spiediena Handlera, tad animaacijas laikaa neko citu vairs nevarees dariit...

 

Uztaisi vienkaarshi Taimer objektu, ar vajadziigo animaacijas intervaalu, un pie vajadziibas aktivizee. Veel labaak - Taimeris lai iet visu laiku, un uz ekraana raada shobriideejo speeles staavokli. Tas buus tas, ko VIL teica - sadala 2 daljaas. Pogas spiedieni tikai updeitos infu par to, kas notiek - kjipa, uzliks mainiigo, ka Zombijs kustas, taadaa un taadaa virzienaa. Taimeris tad ik pa laicinjam apskatiisies, un, secinaajis, ka Zombijs kustas, saaks raadiit seciigi 3 dazjaadus .bmp failus... Protams, kaut kur arii jaapieglabaa, kursh .bmp fails buus naakamais, lai naakamajaa Taimera funkcijas izpildee notiktu tas... utt.

Link to comment
Share on other sites

assaulter

Man domāt jātaisa procedūra, kas pieņem globālo mainīgo ar nozīmi vai vispār jākustas.

Tad šī procedūra jāieliek taimerī.

 

{ pie globālajiem mainīgajiem }

var jakustasUp: boolean;



procedure animeeUp;

begin

 while jakustasUp do

 begin

   for i to 4 do

   begin

     if i=1 then

     begin

       Image1up.picture.visible:=False;

       Image2up.picture.visible:=True;

       Image3up.picture.visible:=True;

       Image4up.picture.visible:=True;

     end;

     if i=2 then

     begin

       Image1up.picture.visible:=True;

       Image2up.picture.visible:=False;

       Image3up.picture.visible:=True;

       Image4up.picture.visible:=True;

     end;

     if i=3 then

     begin

       Image1up.picture.visible:=True;

       Image2up.picture.visible:=True;

       Image3up.picture.visible:=False;

       Image4up.picture.visible:=True;

     end;

     if i=4 then

     begin

       Image1up.picture.visible:=True;

       Image2up.picture.visible:=True;

       Image3up.picture.visible:=True;

       Image4up.picture.visible:=False;

     end;

     { pie Uses jāiekļauj SysUtils, lai sleep strādātu }

     { ja taisa ar taimeri, tad nākamā rinda lieka }

     sleep(200);

   end;

   inc(i);

   if i>=3 then i:=1;

 end;

end;





{ NOTIKUMS OnTimer }

procedure TForm1.Timer1Timer(Sender: TObject);

begin

 animeeUp;

 animeeDown;

 animeeLeft;

 animeeRight;

end;



{ NOTIKUMS  OnFormCreate }

procedure TForm1.FormCreate(Sender: TObject);

begin 

 jakustasUp:=false;

end.



procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

Case Key of

 37: if <<<Un šite es jau nezinu ko jāraksta!>>>

   begin

     jakustasUp:=true;

     { šajā gadījumā taimera notikums var iestāties }

     { pēc kāda laika vai arī uzreiz atkarībā no }

     { noteiktā intervāla tāpēc labāk pašam to ielēgt }

     { ar programmas kodu līdz ar attiecīgās pogas }

     { nospiešanu }

   end;

 end;

end;



{ vēl jābūt apstrādātam notikumam par pogu atlaišanau un }

{ šajā gadījumā jāveic: "jakustas:=False" un taimers jāatslēdz }

 

:!:

Nedrīkst aizmirst arī par notikumu Update, kas iestājas brīdī, kad

kādu logu uzliek virs spēles formas (jāpārzīmē laukums - no

jauna jāparāda šobrīdējais stāvoklis).

 

http://delphi.about.com/od/graphics/a/delphigif.htm

te ir dažas komponentes, kas var uzņemties gif attēlošanu

Link to comment
Share on other sites

Manupraat "korektaak" (mazaak probleemu) vareetu buut, ja Timer1Timer neizsauktu veselu 4 kadru ziimeeshanu, bet tikai 1. Katru reizi citu, protams (statusu glabaajam globaalajos mainiigajos). Citaadi shitaa buus raustiita animaacija. Sleep nav taa preciizaakaa funkcija, un, ja jau ir Timer1, lai meeriitu laiku, izmantot veel Sleep() prieksh tam ir... nelogjiski. Nu, manupraat, vareetu buut probleemas. :(

Link to comment
Share on other sites

assaulter
Vilx-

Sleep nav taa preciizaakaa funkcija, un, ja jau ir Timer1, lai meeriitu laiku, izmantot veel Sleep() prieksh tam ir... nelogjiski. Nu, manupraat, vareetu buut probleemas. Sad

tāpēc jau nokomentēju atrunu par sleep! :)

 

 { pie Uses jāiekļauj SysUtils, lai sleep strādātu }

{ ja taisa ar taimeri, tad nākamā rinda lieka }

sleep(200); 

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...