Lazarus - Pole Bitmáp
-
nErD. ' z
Medium Star
- Príspevky: 427
- Registrovaný: 20 jan 2007, 13:13
- Bydlisko: o.O
- Kontaktovať používateľa:
Lazarus - Pole Bitmáp
Caute
Chcem si spraviť jednoduché piškvorky v Lazaruse(niečo ako delphi). Skúsil som to riešiť takto:
- vytvoril som si pole bitmáp (8x8), ktoré som vykreslil do image1.canvas. Pole mam zadeklarované v samostatnom unite PlochaUnit. Tu mám aj triedu TPlocha, ktorá má nejaké metódy.
- v hl. programe som si spravil procedúru MouseDown (zachytí x-ovú y-ovú suradnicu z Image1.Canvas) a pošle ju do metódy ukaz
táto mi zo súradnic vie vypočitať súradnicu pola... čiže keď kliknem na prvý štvorec vráti mi 1,1 keď na druhý 1,2 a podobne. Problem je v tom, že neviem ako zmeniť obrázok bitmapy. Vlastne keď kliknem na ten štvorec aby sa mi zmenil len obrazok (nie aby sa mi nan nalepila dalsia bitmapa).
Na stránke prednášok máme že je príkaz Bmp1.Assign(bmp2); ktorý spraví niečo ako Bmp1:=Bmp2 lenže toto mi nezmení obrázok vlastne nič sa nevykoná. Ešte som natrafil na niečo takéto: Bmp1.Canvas.Draw(0,0,Bmp2); čo taktiež nefunguje, resp. funguje len neviem kde robím chybu. Pri tomto druhom Draw-e ešte treba zadefinovať width a height a pixelformat ale to som už robil a nešlo. Skúste mi dať nejaký hint lebo neviem si s tým rady zatiaľ. No a ešte mi kamarát vravel že cez pole bitmáp to nie je najšťastnejšie riešenie, ale malo by sa to dať aj tak spraviť či sa mýlim ?
Chcem si spraviť jednoduché piškvorky v Lazaruse(niečo ako delphi). Skúsil som to riešiť takto:
- vytvoril som si pole bitmáp (8x8), ktoré som vykreslil do image1.canvas. Pole mam zadeklarované v samostatnom unite PlochaUnit. Tu mám aj triedu TPlocha, ktorá má nejaké metódy.
- v hl. programe som si spravil procedúru MouseDown (zachytí x-ovú y-ovú suradnicu z Image1.Canvas) a pošle ju do metódy ukaz
táto mi zo súradnic vie vypočitať súradnicu pola... čiže keď kliknem na prvý štvorec vráti mi 1,1 keď na druhý 1,2 a podobne. Problem je v tom, že neviem ako zmeniť obrázok bitmapy. Vlastne keď kliknem na ten štvorec aby sa mi zmenil len obrazok (nie aby sa mi nan nalepila dalsia bitmapa).
Na stránke prednášok máme že je príkaz Bmp1.Assign(bmp2); ktorý spraví niečo ako Bmp1:=Bmp2 lenže toto mi nezmení obrázok vlastne nič sa nevykoná. Ešte som natrafil na niečo takéto: Bmp1.Canvas.Draw(0,0,Bmp2); čo taktiež nefunguje, resp. funguje len neviem kde robím chybu. Pri tomto druhom Draw-e ešte treba zadefinovať width a height a pixelformat ale to som už robil a nešlo. Skúste mi dať nejaký hint lebo neviem si s tým rady zatiaľ. No a ešte mi kamarát vravel že cez pole bitmáp to nie je najšťastnejšie riešenie, ale malo by sa to dať aj tak spraviť či sa mýlim ?
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
súhlasím s kamošom. Toto je veľmi krkolomné riešenie. Keby si vytvoríš pre každé políčko samostatný obrazok a naukladáš ich vedľa seba, bolo by to omnoho jednoduchšie. Klikanie by si nemusel potom prerátavať, ale by si dal mousedown rovno na jednotlivé obrázky. Celé piškvorky by mali asi 3 riadky kodu, v ktorých by si iba zmenil obrázok na ktorý sa kliklo a zmenil nejaký mutext ktorý určuje kto je na ťahu (krúžok alebo krížik)
-
nErD. ' z
Medium Star
- Príspevky: 427
- Registrovaný: 20 jan 2007, 13:13
- Bydlisko: o.O
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
teda budem mat array [....] of TCanvas ? Viem ako vypísať pole, ale neviem ako mu priradiť obrázok, resp. akeho typu bude to pole
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
vôbec nepotrebuješ array, budeš mať naukladaných X obrázkov do matice na formulári.
-
Chalesnik
Medium Professional
- Príspevky: 1118
- Registrovaný: 07 okt 2008, 15:11
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
Zdravim nepatri to semka ale videl som Lazarus tak som nechcel zakladat novu temu vedeli by ste dakto spravit toto potrebujem to pre kamaratku ... ? Naprogramujte projekt, v ktorom budete pomocou tlačidla a editovacieho
políčka kresliť obrázok lesa. Po stlačení tlačidla sa z editovacieho políčka
načíta hodnota N a na náhodných pozíciách sa vykreslí N stromov. Korunu
stromu vykresľujte ako zelenú elipsu a kmeň ako hnedý obdĺţnik. Veľkosti
strán všetkých obdĺţnikov generujte náhodne z intervalu od 30 do 70.
políčka kresliť obrázok lesa. Po stlačení tlačidla sa z editovacieho políčka
načíta hodnota N a na náhodných pozíciách sa vykreslí N stromov. Korunu
stromu vykresľujte ako zelenú elipsu a kmeň ako hnedý obdĺţnik. Veľkosti
strán všetkých obdĺţnikov generujte náhodne z intervalu od 30 do 70.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
áno, vedeli by sme. Ak ale kamarátka niečo potrebuje, nech sa sem registruje a založí si tému v programovaní podľa všetkých náležitostí, to znamená že dá aspoň začiatok aby bolo vidno o čo sa pokúsila a my ju nasmerujeme.
-
nErD. ' z
Medium Star
- Príspevky: 427
- Registrovaný: 20 jan 2007, 13:13
- Bydlisko: o.O
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
Chcem sa ešte spýtať či existuje nejaké editovacie okno kde ked nieco vlozim a stlacim tlacidlo tak to co som tam napisal sa mi ulozi kdesi.
alebo staci na to obycajne policko TEdit a len tam niečo vložim to mam uložene v Edit1.Caption (alebo nieco taketo) a button1 spravi meno:=Edit1.Caption a vytvorim novy objekt Hrac1:=THrac.Create(meno);
//skrátka som chcel spraviť niečo ako menu vedla hracej plochy a ked tam napise hrac meno a stlaci tlacidlo vytvori sa pre neho objekt.. ale viac by mi tam sedelo niečo take že ked vytvorim hru a inicializuje sa mi graficka plocha tak pred tym ako ju nacita vyhodi dialogove okno kde zahra meno Hrac1 hrac2 a hra sa zacne tym ze klika hrac1
///a ešte miniotázka: nedá sa ešte vo formcreate alebo úplne na začiatku nastaviť konštanta ? Niečo ako pred začatim programu ci sa neda zadať konštanta a podľa toho sa už správa program...
alebo staci na to obycajne policko TEdit a len tam niečo vložim to mam uložene v Edit1.Caption (alebo nieco taketo) a button1 spravi meno:=Edit1.Caption a vytvorim novy objekt Hrac1:=THrac.Create(meno);
//skrátka som chcel spraviť niečo ako menu vedla hracej plochy a ked tam napise hrac meno a stlaci tlacidlo vytvori sa pre neho objekt.. ale viac by mi tam sedelo niečo take že ked vytvorim hru a inicializuje sa mi graficka plocha tak pred tym ako ju nacita vyhodi dialogove okno kde zahra meno Hrac1 hrac2 a hra sa zacne tym ze klika hrac1
///a ešte miniotázka: nedá sa ešte vo formcreate alebo úplne na začiatku nastaviť konštanta ? Niečo ako pred začatim programu ci sa neda zadať konštanta a podľa toho sa už správa program...
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
máš to v Edit1.text a nie Edit1.caption, a samozrejme to funguje tak, ako si dal ukážku s tým vytvorením hráča. Ak chceš aby to vyskočilo skôr, daj si ten edit do samostatného formuláru a ten zavolaj cez Form2.showModal
-
nErD. ' z
Medium Star
- Príspevky: 427
- Registrovaný: 20 jan 2007, 13:13
- Bydlisko: o.O
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
dá sa pred spustenim programu priradit konstante nejaku hodnotu ? ze najskor si clovek vybere napr. či chce 5x5 alebo 10x10 alebo 15x15 a potom mi napr. vykresli pole s konstantou 15 ked si vyberem taku moznost.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: Lazarus - Pole Bitmáp
použi namiesto konštanty globálnu premennú