PDA

Prikaži potpunu verziju : Vb i grafika


nika100
20.11.2006, 23:25
'ocu da napravim neku igricu u vb6 i interesuje me sledece:
Do sada sam za prikazivanje koristio nizove slika i posle duzeg vremena pocinje da bude veoma sporo, ali i slike trepere.
Sada bih da probam da nekako sve to pokazem u jednom picture box-u, ali ne znam kako se to radi.
Mozete li da me malo posavetujete?

mirk
21.11.2006, 14:49
Treperenje slike rešava se tehnikom dvostrukog baferisanja tj. postoje 2 bafera jedan je ekran a drugi je negde u memoriji računara. A taj problem možeš rešiti upotrebljavajući .GIF format.

nika100
21.11.2006, 20:27
Ok, hvala.
Samo kako da baferujem sliku, i interesuje me kako da sve pokazem u samo jednom picture boxu(celu scenu)?

NoxX
21.11.2006, 20:49
Најбоље ти је да мењаш слике у њему (мењајући picture или image своство) или да узмеш image box и да у њега убациш све слике које ти требају и да их позиваш по броју.

nika100
21.11.2006, 22:15
Da, ali meni treba da jedan picture box prikazuje celu jednu scenu npr. 10 slika kao sto je to slucaj sa direct x-om. Jedan picture box i pokazuje sve na njemu.
Eno dole na slici je sve objasnjeno(ne bas lepo:D :D :D )

NoxX
21.11.2006, 22:27
Нажалост, ја никад нисам радио на тај начин и не верујем да ВБ то подржава, мада их можеш третирати као два посебна објекта.

nika100
21.11.2006, 22:42
Ne znam kako da objasnim.
Pogledaj attachment (treba vbruntime 4.0)
Videces da mesto svih slika ima samo jedan picture box na kome se iscrtava cela scena.(Otvori .mak mesto .vbp

mirk
22.11.2006, 16:28
Hmmmm pa prvo nekako sve slike renderuješ na jednu sliku i onda tu sliku pokazuješ. A zašto ti treba jedan picture box.

nika100
22.11.2006, 20:07
Ali ne znam kako da renderujem.
Inace treba mi jedna da kada bi se pomeralo nesto ne bi isle prugice.

MG-RAY
23.11.2006, 15:43
Hmmmm pa prvo nekako sve slike renderuješ na jednu sliku i onda tu sliku pokazuješ. A zašto ti treba jedan picture box.

zbog double-buffera...tj. ne desava se treperenje slike kod iscrtavanja u PB-u...

nemoj da koristis picture box, jer je u njemu tako nesto nemoguce (koliko ja znam...zahtevalo bi promenu koridinata), nego, upotrebi direct draw ili bitBlt...

nika100
23.11.2006, 23:44
Ali neznam kako se to upotrebljava
(Imam knjigu Dx ali samo za .Net platformu (koju imam al je teska))

nika100
24.11.2006, 23:21
Evo,uspeo sam to sto sam hteo, napravio sam nesto (kontrole su a i w) sto se iscitava na jednoj slici.
Problem je u tome kako da kada kliknem na desno ostaje mi predhodna pozicija, a levo je normalno.
Ima li neko ideju kako to da resim?

Marko_L
25.11.2006, 0:26
Stavi svojstvo Autoredraw kontrole Picture2 na True i pre svakog blitovanja dodaj liniju Picture2.Cls. Mada ti je stil programiranja malo neobičan. Bolje bi bilo da si napravio jednu glavnu petlju koja radi blitovanje, a sa GetAsynckeystate čitao tastaturu i menjao koordinate.

mirk
25.11.2006, 11:59
Stavi svojstvo Autoredraw kontrole Picture2 na True i pre svakog blitovanja dodaj liniju Picture2.Cls. Mada ti je stil programiranja malo neobičan. Bolje bi bilo da si napravio jednu glavnu petlju koja radi blitovanje, a sa GetAsynckeystate čitao tastaturu i menjao koordinate.

Ovo Picute2.Cls valjda znači da je briše, a kod takvog zna treperati slika jer sam se sam u to uverio

nika100
25.11.2006, 15:59
Tu komandu getasynckeystate ne mogu da razumem, pa ne znam sta da je.

Marko_L
25.11.2006, 19:50
Ovo Picute2.Cls valjda znači da je briše, a kod takvog zna treperati slika jer sam se sam u to uverio
Kod blitovanja kada se sprajt pomera, mora da se radi čišćenje ekrana, inače dolazi do dupliranja. Flickering (treptanje) će rešiti Autoredraw.
Tu komandu getasynckeystate ne mogu da razumem, pa ne znam sta da je.
Api poziv koji prati stanje tastature (da li je neki taster pritisnut ili ne). Mnogo bolja varijanta nego korišćenje Textbox-a. Primer korišćenja:
Prvo deklarišemo funkciju u general sekciji forme (ili možda bolje da se postavi u modul i umesto Private Declare stavi Public Declare, kako bi funkcija mogla da se poziva iz bilo kog dela programa)
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

i onda vrlo lako proveravamo da li je neki taster pritisnut
If GetAsyncKeyState(vbKeyA) <> 0 Then...uradi nesto 'ako je pritisnuto slovo a
If GetAsyncKeyState(vbKeyW) <> 0 Then...uradi nesto drugo 'ako je pritisnuto slovo w...
uglavnom shvatio si poentu :)

nika100
26.11.2006, 1:34
Da, znam da je poziv iz API-ja, i nisam znao kako da ga koristim.
Inace sad si mi pojasnio.
HVALA!

nika100
26.11.2006, 1:36
Kada stavim autoredraw na true onda mi se ne vidi slika.
Umesto nje se vidi pozadina desktopa.

MG-RAY
26.11.2006, 12:01
Kada stavim autoredraw na true onda mi se ne vidi slika.
Umesto nje se vidi pozadina desktopa.

pogledaj koje je setovanje za transparentnu boju, moze da se desi da je identicna za bojom form-a.

mada, kod mene je sve OK.

nika100
26.11.2006, 13:28
Uspeo sam nesto.

B@NE
26.11.2006, 13:30
Uspeo sam nesto.
Aj ako nije prob postuj rad da i ostali vide!:ciao:

nika100
26.11.2006, 13:31
Evo za oko sat vremena samo da vidim nesto u linux-u, pa kad udjem u Win poslacu