:: |
Autor |
Poruka |
dreams Upućeni član
|
Godine: 33
Datum registracije: 27 Jun 2005 Poruke: 352 Mesto: Paviljoni!
|
|
Posto sam pokusao da uradim nesto u Delphiju ( File Manager ) ali sam to batalio, odlucio sam da radim igru avanturistickog karaktera, znate ono ide cikica skuplja zlato uzme kljuc i predje na sledeci nivo.
E sada mene interesuje, kako ja da uradim sledece:
Kada zelim da mi se npr. shape ili slika krecu na OnKeyPress sta treba da otkucam, ja znam da nesto treba prvo staviti ( ako je slika )
Image1.Left:= Image1.Left+5
Ali gde treba ovo da stavim...
pozz
|
|
|
|
|
|
Pedjanbg Početnik Domaćeg.de
|
Godine: 42
Datum registracije: 20 Jan 2006 Poruke: 229 Mesto: Novi Beograd
|
|
Ja Pascal i Delphi ne znam uopste, ali to bi valjda trebalo da se nalazi u metodi koja se poziva pri podizanju event-a KeyPress, ili kako se vec zove. Ali ja stvarno ne znam kako su ove stvari resene u datom okruzenju...
|
|
|
|
|
|
dreams Upućeni član
|
Godine: 33
Datum registracije: 27 Jun 2005 Poruke: 352 Mesto: Paviljoni!
|
|
Znam nesto da ide:
On Key Press:
case key of
37: ;// ovde postavim vrednost
38: ;// ovde postavim vrednost
39: ;// ovde postavim vrednost
40: ;// ovde postavim vrednost
E sad da li ima nesto u privatnim ili public deklaracijama, ili nesto drugo...
pozz
|
|
|
|
|
|
Pedjanbg Početnik Domaćeg.de
|
Godine: 42
Datum registracije: 20 Jan 2006 Poruke: 229 Mesto: Novi Beograd
|
|
Nisam siguran da sam razumeo. Ti hoces da ti se na pritisak tastera, staticna slika povecava, smanjuje, ide levo, ili ide desno. Metoda koja se poziva pri pritisku tastera trebalo bi da za argument ima podatak koji u sebi kao public clan ima Ascii pritisnutog tastera, na osnovu kog bi ti trebalo da odradis odgovarajucu akciju. U C#-u je to instanca klase KeyPressEventArgs. Ne znam za Delphi.
|
|
|
|
|
|
dreams Upućeni član
|
Godine: 33
Datum registracije: 27 Jun 2005 Poruke: 352 Mesto: Paviljoni!
|
|
Ja zelim da kada pritisnem levo desno gore ili dole da mi slika ide u tom pravcu, ali sta bi ja trebalo da postavljam u public ili private? I one brojke 37, 38... to su kada se pretvori funkcijom IntToStr.
|
|
|
|
|
|
Pedjanbg Početnik Domaćeg.de
|
Godine: 42
Datum registracije: 20 Jan 2006 Poruke: 229 Mesto: Novi Beograd
|
|
Odakle ti te brojke?
Jel mozes da das deo koda?
|
|
|
|
|
|
dreams Upućeni član
|
Godine: 33
Datum registracije: 27 Jun 2005 Poruke: 352 Mesto: Paviljoni!
|
|
Taj deo koda kada se odredjuje vrednost ( 37, 38...), nisam siguran kako ide, mislim da je ovako nesto:
...Label1.Caption:= Key IntToStr...
Tako nesto
|
|
|
|
|
|
Pedjanbg Početnik Domaćeg.de
|
Godine: 42
Datum registracije: 20 Jan 2006 Poruke: 229 Mesto: Novi Beograd
|
|
Pazi. U C#-u bi moglo da se napise nesto ovako:
Code: |
private void KeyPress1(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
switch((int)e.KeyChar)
{
case 37:
//radi nesto
break;
case 38:
//radi nesto
break;
case 39:
//radi nesto
break;
case 40:
//radi nesto
break;
}
}
|
Castovanje char-a u int bi trebalo da daje Ascii datog karaktera. Ne znam koje tastere ti hoces da koristis, i ne znam kakav potpis ova funkcija ima u Delphi-u.
|
|
|
|
|
|
tomipriest Početnik Domaćeg.de
|
Godine: 48
Datum registracije: 24 Feb 2006 Poruke: 4 Mesto: Osijek
|
|
ma daj čovječe uzmi c++ i riješi se drugih gluposti
|
|
|
|
|
|
Doktor ~Sanjicino*slculence~
|
Godine: 38
Datum registracije: 17 Nov 2005 Poruke: 4264 Mesto: Novi Sad
|
|
dreams je napisao/la sledeće: | Posto sam pokusao da uradim nesto u Delphiju ( File Manager ) ali sam to batalio, odlucio sam da radim igru avanturistickog karaktera, znate ono ide cikica skuplja zlato uzme kljuc i predje na sledeci nivo.
E sada mene interesuje, kako ja da uradim sledece:
Kada zelim da mi se npr. shape ili slika krecu na OnKeyPress sta treba da otkucam, ja znam da nesto treba prvo staviti ( ako je slika )
Image1.Left:= Image1.Left+5
Ali gde treba ovo da stavim...
pozz |
Ovako Dreams...
Tu si u pravu to je kod koji pomera sliku za 5 pixela napred. Uz to moras ubaciti i ogranicenje da bi definisao kraj sekvence kojom tvoja slika (tj. sprajt) moze da se krece. Da ne bi dobio efekat da ti "taj cikica" ne ude u zid ili izadje van ekrana. OK to ces ti resiti u zavisnosti od toga kako si definisao teren ili podlogu.
Taj kod kucas u nekom od OnKey dogadjaja (event). Od tebe zavisi da li ces raditi sa OnKeyPress, OnKeyDown ili OnKeyUp. To ti ja ne mogu reci posto ti najbolje znas sta ti treba. Ali ta metoda ima jednu manu. Radi se o intervalu koji windows koristi da bi detektovao pritisak izmedju dva tastera (repeat time). To ti je u konkretnom slucaju brzina kojom se recimo ispisuje neki znak u vordu ako drzis pritisnut taster. U delfiju je malo tesko postaviti taj interval na vrednost 0 ali je ipak moguce. Najbolji nacin je da koristis prekidne rutine tastature koje ces "na zalost" morati da kontrolises iz Assemblera. Koriscenjem assemblerskih funkcija, poruka da je neki taster pritisnut se skenira u realnom vremenu i na njega ne utice repeat-interval. Ako ne znas assembler probaj da konsultujes neku skriptu ili neki izvor sa neta kako bi pronasao tacan nacin kako se to radi. Inace kod iz assemblera mozes u izvornom obliku koristiti u Delphiju na sledeci nacin:
Code: |
PROCEDURE ili FUNCTION tvoja_rutina(tvoji_parametri: TNeki_tip);
ASSEMBLER ili ASM
... {assembler code}...
END;
|
Obrati paznju da sa assemblerom nema igranja. Dakle ne pokusavaj nesto u sta nisi 100 % siguran ili posledice po tvoj racunar mogu da budu katastrofalne.
Pozzzzz
|
_________________ ~*~Vojim svoje srculence najvise na svetu ~*~ :322:
|
|
|
|
|
dreams Upućeni član
|
Godine: 33
Datum registracije: 27 Jun 2005 Poruke: 352 Mesto: Paviljoni!
|
|
E sve je ok resio sam i radi
Code: |
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Form1.DoubleBuffered:=true;
case key of
37: Image2.Left:=Image2.Left-5;{levo}
38: Image2.Top:=Image2.Top-5;{gore}
39: Image2.Left:=Image2.Left+5;{desno}
40: Image2.Top:=Image2.Top+5;{dole}
end;
end;
|
Sada mi treba nesto drugo, kada se Image2 nalazi na odredjenoj poziciji, da se npr. na Label-u ispise neki tekst?
|
|
|
|
|
|
Doktor ~Sanjicino*slculence~
|
Godine: 38
Datum registracije: 17 Nov 2005 Poruke: 4264 Mesto: Novi Sad
|
|
E sad ta odredjena pozicija moze biti precizno odredjena recimo nekim koordinatama (x, y) ili nekim opsegom pozicija recimo x in [min..max]. Inace ako radis sa slikom kako si je ti nazvao Image2 njene koordinate kontrolises preko Top i Left parametara.... Ako sam dobro shvatio sta hoces, to se moze uraditi ovako:
Uzmi na primer da je Label na kome zelis da ispises tekst Label1: TLabel:
x := //left koordinata
y := //top koordinata
...
If (Image2.Left = x) and (Image2.Top = y) Then Label1.Caption := 'Neki Tekst';
Ovo je primer ako tacno odredis poziciju sa x i y. Ali u opstem slucaju to se moze raditi i sa opsegom polozaja.
Umesto uslova Label2.Left = x mozes koristiti Label2.Left in [350..500]. Brojevi 350 i 500 su uzeti kao primer ali u principu to znaci da ce se odredjeni tekst na labelu ispisati ako je Left parametar slike Image2 u intervalu od 300 do 500.
Nadam se da je to to sto trazis.
Pozzzz
|
_________________ ~*~Vojim svoje srculence najvise na svetu ~*~ :322:
|
|
|
|
|
|