Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

GDI+, treba mi uputstvo.

[es] :: GameDev - Razvoj Igara :: GDI+, treba mi uputstvo.

[ Pregleda: 3039 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon GDI+, treba mi uputstvo.28.11.2006. u 17:50 - pre 210 meseci

-------------------------------
Nadam se nekom malo opsirnijem objasnjenju od strane nekog korisnika, dakle na srpskom( nadam se da ce neko izdvojiti malo vremena da me "uputi" jer ja uvek pomognem kad mogu a ova mi informacija bas treba).
-------------------------------
Radi se o sledećem.
Odma da kazem da me Game Maker i sl. ne zanima. Znam C, C++ i ucim MC++( i ipak sam pocetnik).... U knjizi "Visual C++ .NET" (od Chapmana) sam naisao na poglavlje koje se bavi radom sa GDI+ i procitao ga... O OpenGL i DirectX pojma nemam.A ni o multithread...
Ono sto ja zelim da uradim(za pocetak, jel)( i da bude koriščenjem GDI+a) je da napravim prostu i jednostavnu igru "lepeći kontrole u formu" pa da one rade tamo nešto...
U vezi tog "tamo nečeg": Mislim da koliziju( a volim da kazem "koluziju", mada znam da je nepravilno) mogu da odradim... Problem je kretanje 2D sprajtova. Kako da ga ostvarim? Pomoću timera? Deluje glupo i neostvarivo mada nisam probao...

1. Ne tražim kod, niti kakav link, već da mi neko objasni kako da postignem da, ako imam klasu koja definiše recimo neku kuglicu( metak) koji treba da se po svom postanku počne kretati pozitivno po npr. X osi. Dakle, u konstruktoru te klase treba da se odradi direktiva za to kretanje. Samo "skakutanje", koriscenje sprajtova i slicno znam da uradim i to nije problem vec... Hm, imam f-ju koja odradi "korak" objekta u odredjenom smeru medjutim ne znam kako da periodicno pozivam tu funkciju za gomilu objekata koji treba da se pomere( a broj tih objekata nije stalan vec se dinamicki menja)...
(imam par ideja kako da ovo uradim ovo sa timer-om ali bih voleo da me vi malo "prosvetlite")

2. Još jedna stvar, recimo da se dogodi kolizija i sad metak treba da nestane... Kako da ga uklonim sa "lica" forme? Znam da je ovo glupavo i (previse) jednostavno pitanje ali, eto, u MC++ to ne znam...

Unapred, hvala!
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.beotel.net.



Profil

icon Re: GDI+, treba mi uputstvo.29.11.2006. u 01:07 - pre 210 meseci
Osnovni deo code-a koja ti treba je game loop. On izgleda najprostije ovako:
Code:

DWORD pocetnoVreme = timeGetTime(); 
DWORD prethodnoVreme = 0;
while (!bQuit)
{
 DWORD vreme = timeGetTime() - pocetnoVreme; 
 Update(vreme, vreme - prethodnoVreme);
 Render();
 prethodnoVreme = vreme;
}


U Update metodi, proveri stanje ulaznih uredjaja (mis, tastatura, joystick,...) animiraj sve objekte, koliziju,...
U Render metodi iscrtaj sve vidljive objekte na koordinatama koje si izracunao u Update metodi.

vreme i prethodnoVreme su promenljive pomocu kojih animiras objekte. Obzirom na to da racunari rade na
razlicitim frekvencijama, moras osigurati da ce igra raditi istom brzinom na svim masinama. Zato animacju
svih objekata vezi za vreme ili za delta-vreme (vreme - prethodnoVreme). U gornjem slucaju... vremenska jedinica
je ms (milisekunda). Update metoda prima trenutno vreme i delta vreme. Za neke annimacije mozes iskoristiti
trenutno vreme, a za neke druge delta-vreme.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: GDI+, treba mi uputstvo.29.11.2006. u 16:06 - pre 210 meseci
Da vidim dal' sam shvatio: Unutar Update() funkcije proveravam dal je prošlo dovoljno vremena (preko deltaVreme) i ako jesto izračunam sve potencijalne kolizije i pomeranja itd... A u Render() samo "pomerim" sta se treba pomeriti...?

Ali, while će da "vrti" stalno pa će komp da se optereti 100%... Jel da? Ako bih stavio npr. Sleep(1) jel bi se događalo da korisnik recimo pritisne neki od tastera na tastaturi a da isti ne bude "uhvaćen" jer je u tom trenutku program bio "uspavan"? Mada mi deluje ne logično da neko mož' tako brzo da pritisne taster
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.dynamic.sbb.co.yu.



Profil

icon Re: GDI+, treba mi uputstvo.29.11.2006. u 20:10 - pre 210 meseci
Ne nego u Update pomeris sve sto treba, a u Render iscrtas objekte na novim (malopre pomerenim) koordinatama.
Ovaj loop ce zaista pojesti 100% procesora bas kao i sve ostale igre. Mozes da stavis Sleep(1) ali ce taj sleep
da traje od 15-40 ms u zavisnosti od CPU-a, OS-a i sta se trenutno od programa vrti u pozadini.
 
Odgovor na temu

hardcastle
marko mirić
osijek

Član broj: 92758
Poruke: 20
*.adsl.net.t-com.hr.



Profil

icon Re: GDI+, treba mi uputstvo.29.11.2006. u 21:22 - pre 210 meseci
Postaviš beskonačnu petlju tj staviš while(true) i neće provjeravati vrednost bQuit;
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: GDI+, treba mi uputstvo.30.11.2006. u 16:38 - pre 210 meseci
Pa koja je razlika? Opet će opterećenje biti maximalno...?
 
Odgovor na temu

Filip Strugar
Filip Strugar
UK

Član broj: 9871
Poruke: 383
...52.130.235.dc.telemach.net.



+1 Profil

icon Re: GDI+, treba mi uputstvo.30.11.2006. u 21:20 - pre 210 meseci
Citat:
yooyo: Ne nego u Update pomeris sve sto treba, a u Render iscrtas objekte na novim (malopre pomerenim) koordinatama.
Ovaj loop ce zaista pojesti 100% procesora bas kao i sve ostale igre. Mozes da stavis Sleep(1) ali ce taj sleep
da traje od 15-40 ms u zavisnosti od CPU-a, OS-a i sta se trenutno od programa vrti u pozadini.

Da sitnicarimo, trajace oko 10ms u vecini slucajeva (na XP-u na primer), osim ako nesto drugo ne jede procesor. :)
(Inace, to se moze hack-promeniti (smanjiti na 1ms) sa timeBeginPeriod/timeEndPeriod, win32 jelte)

Citat:
toxi_programer: Pa koja je razlika? Opet će opterećenje biti maximalno...?

To predlozeno neproveravanje bQuita nece promeniti nista.
Isprobaj Sleep(x) pa koristi za x sta ti odgovara.

Inace, sto se pritiska tastera tice, ako radis na Windowsu, njih dobijas kao windows poruke koje trebas procesirati u main loopu, nadji neki primer na netu (npr http://www.mvps.org/directx/articles/writing_the_game_loop.htm) tako da ih ne mozes 'ne uhvatiti', bez brige :)
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
67.151.201.*

Sajt: https://github.com/bkarad..


+11 Profil

icon Re: GDI+, treba mi uputstvo.01.12.2006. u 02:20 - pre 210 meseci
Zapravo dovoljno je staviti ::Sleep(0) u main loop (deo koji ne obrađuje poruke) i ostali procesi će dobiti dovoljno vremena.

p.s. LOL za while(true) "optimizaciju"... ;)

 
Odgovor na temu

masetrt
Marko Djurovic
Programer, Omni-Explorer
Beograd

Član broj: 3129
Poruke: 228
195.252.119.*

Sajt: www.vast.com


+2 Profil

icon Re: GDI+, treba mi uputstvo.01.12.2006. u 09:46 - pre 210 meseci
Koliko sam razumeo toxi koristi menaged c++ pa evo jos i jednog nepopularnog resenja lakog za realizaciju. Da mu se main loop izvrsava u jednom, a input "bufferuje" u drugom thredu. Sa Thread::Sleep(miliseconds) ce moci uspavati thread na tacno vreme koje zeli. Opet kazem da resnje nije bas najbolje ali je lako za realizaciju i moze da vrsi poso. Sto se tice nestajanja "metka" cisto visible setuj na false, ali nemoj da dispozujes taj image objekat jel ga mozes kasnije opet upotrebiti.
His majesty Grand Duke of Shumadija and Western Pomoravlje
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
*.dynamic.sbb.co.yu.



Profil

icon Re: GDI+, treba mi uputstvo.01.12.2006. u 10:57 - pre 210 meseci
Da se ne gusimo oko timera.. Sleep nikad nece odspavati onoliko koliko mu kazes, ali je dovoljno da ostali procesi dobiju parce CPU vremena.
Cak je i procesiranje windows poruka u main-loop-u dovoljno da i ostali procesi "dishu" a zauzece ce biti ~100%.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.smin.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: GDI+, treba mi uputstvo.03.12.2006. u 15:58 - pre 210 meseci
Ljudi, hvala vam. Ako negde stanem eto mene opet
Pozz
 
Odgovor na temu

[es] :: GameDev - Razvoj Igara :: GDI+, treba mi uputstvo.

[ Pregleda: 3039 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.