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

Kako kontrolisati neodređen broj elemenata u igri?

[es] :: GameDev - Razvoj Igara :: Kako kontrolisati neodređen broj elemenata u igri?

[ Pregleda: 2889 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Duck_
Darko Jovanović
Sremska Kamenica

Član broj: 43509
Poruke: 67
*.neobee.net.

Sajt: www.google.com


Profil

icon Kako kontrolisati neodređen broj elemenata u igri?16.01.2005. u 00:58 - pre 233 meseci
Zanima me na koji način se kontroliše neodređen broj elemenata u igri. Na primer u real-time strategijama koje su poput Command & Conquera, nikada nema tačno određen broj vojnika, tenkova, pasa, pauka... može ih se "naštancati" na stoitine. Ono što mene fascinira je što svaki od njih ima tačno određen položaj (kordinate), količinu energije, smer u kojem je okrenut (i ko zna šta još) i te "podatke" nepogrešivo zadržava čak i kada se nalazi na nekom delu mape koji je poprilično udaljen od dela koji vidimo na ekranu. Kako se to izvodi? Kakva je to vrsta podataka? Da li igra koristi neku vrstu baze podataka iz koje čita (i apdejtuje) podatke za svaki elemenat ili su u pitanju nekakve (meni nepoznate) specijalne
vrste promenjivih?
Kako igra manipuliše sa takvim podacima.? Da li programer mora unapred napraviti ograničen broj elemenata (pa se meni samo čini da nema ograničenja)? Da li se na primer uništeni elementi "totalno brišu iz baze" ili se u "bazu" na neki način evidentira da je "elemenat uništen" pa igra kasnije "preskače" taj podatak?

Pitam jer želim to da naučim. Nadam se da vas nisam smorio.
 
Odgovor na temu

bkaradzic
Branimir Karadžić
ArenaNet
Seattle, WA

Član broj: 14953
Poruke: 1630
*.pandemicstudios.com.

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


+11 Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?16.01.2005. u 02:01 - pre 233 meseci
Nije baš najlakše odgovoriti na to pitanje ukratko, a da odgovor bude kvalitetan. U igrama nikada nema neodređen broj nečega. Može da bude veliki broj, i da tebi kao igraču izgleda neodređeno, ali programeri i dizajneri tačno postavljaju vrednosti za maksimume. I to rade da bi programeri mogli da optimizuju, a dizajneri da drže balans između igrača i AI.

Potpun odgovor na ovo i slična pitanja možeš naći u ovim knjigama:

AI Game Programming Wisdom by Steve Rabin
ISBN: 1584500778
http://www.amazon.com/exec/obi...lance&s=books&n=507846

AI Game Programming Wisdom 2 by Steve Rabin
ISBN: 1584502894
http://www.amazon.com/exec/obi...lance&s=books&n=507846

Branimir

 
Odgovor na temu

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.nat-pool.bgd.sbb.co.yu.



+2 Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?16.01.2005. u 02:12 - pre 233 meseci
Ne znam kako su to radili u Westwood Studios-u, ali mogu da ti kažem kako sam ja to radio u svom RTSu - siguran sam da su osnovni koncepti u dlaku isti u svim RTSovima.

Ali možda bi trebalo prvo da počnemo od jednostavnijeg primera - Pong.

U ovoj igri su reketi levo i desno predstavljeni jednom jedinom varijablom - Y položaj reketa na ekranu. Loptica je predstavljena pomoću 4 varijable - X položaj lopte, Y položaj lopte, promena položaja X u jednom ciklusu, promena položaja Y u jednom ciklusu. Širina reketa i njihove Y pozicije su verovatno bile hardkodirane u ono doba. Igra se zasnivala na tome da se u svakom ciklusu apdejtuje pozicija lopte, proveri da li je udarila u zid, proveri da li je udarila u levi reket, proveri da li je udarila u desni reket, proveriti da li je prošla kroz levu gol liniju, pa onda da li je prošla kroz desnu gol liniju, eventualno odbiti loptu ako je potrebno, primiti delta koordinate reketa od igračkih upravljača, apdejtovati Y pozicije reketa, i početi sledeći ciklus.

25 godina kasnije, C&C prati potpuno isti koncept, samo je sve dovedeno na novi nivo složenosti. Svaka jedinica je u memoriji kompjutera predstavljena gomilom varijabli. Sve vreme, bez obzira da li je na ekranu ili nije. Nikakvih "specijalnosti" tu nema. E sada, kako se ove varijable skladište, to je drugo pitanje. U poslednjih 10ak godina svi podaci u kompjuterskim igrama skladište se u vidu klasa. Ne znam da li ti treba objašnjavati pojam klase, pa te neću potencijalno vređati objašnjenjem. Ali bitno je znati ovo: po izgradnji nove jedinice odvaja se deo RAM memorije za skladištenje podataka o toj jedinici i programu se daje adresa te memorije da je ima u vidu. Kada jedinica zagine, oslobađa se odgovarajući deo memorije. Programeri vole da ograniče maksimalan broj jedinica (meni se u C&C2 desilo da dođem do granice), ali ne toliko zbog problema sa memorijom koliko zbog toga što previše jedinica preterano usložnjava i usporava program.

Na primer, neke varijable koje se koriste za opisivanje stanja jedinice u RTSu koji koristi bitmape:
- pozicija (xyz)
- trenutan vektor kretanja(bilo u delta xyz ili u formatu theta-phi-speed) i facing jedinice
- trenutni hit pointsi jedinice
- (vrlo bitno) pokazivač na VRSTU jedinice (bilo bi ekstremno nepraktično skladištiti podatke o maksimalnoj brzini grizli tenka u svakoj jedinici, jer svi imaju istu maksimalnu brzinu. Zato odvojiš mali deo memorije za opisivanje konstantnih vrednosti za određene VRSTE jedinica)
- trenutno stanje oružja, koliko ostaje cooldowna (vremena dok jedinica ne može ponovo da zapuca)
- privremene AI varijable (poslednji A* path, mod, koordinate na koje je poslana ova jedinica, trenutno AI stanje i skript koji se izvršava)
- nivo trenutnog iskustva, goriva, municija, štagod...

Ako se imalo baviš programiranjem predlažem ti da pokušaš da napraviš klon Ponga. Ja sam to (dokazano) jednom prilikom uradio za 25 minuta još dok sam bio relativni početnik. Mislim da će ti to objasniti neke stvari koje si hteo da pitaš.
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.comcast.net.



+18 Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?16.01.2005. u 18:49 - pre 233 meseci
Uzgred, C&C i drugi imaju ogranicen maksimalni broj jedinica u igri, ali uglavnom iz drugih razloga - prvo, ipak ne mogu da nacrtaju previse jedinica na jednom ekranu, drugo, ne mogu da provedu dovoljno vremena u AIu za gomilu jedinica, i ako nista drugo, ono zbog game balance-a.

Ne znam ni jednu komercijalnu RTS koja zaista pusta igraca da stancuje jedinice do mile volje. To naravno ne znaci da to nije moguce, ali uvek se iz prakticnih razloga nadje neki nacin da se broj jedinica limitra (command points, nedostatak resursa, sta vec).
 
Odgovor na temu

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.nat-pool.bgd.sbb.co.yu.



+2 Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?16.01.2005. u 23:34 - pre 233 meseci
Citat:
Reljam:Ne znam ni jednu komercijalnu RTS koja zaista pusta igraca da stancuje jedinice do mile volje. To naravno ne znaci da to nije moguce, (...).
Hm, do mile volje... uvek je tu memorijsko ograničenje. Ako 1 jedinica zauzima 10K a ja imam 128MB free (pazite, free!) RAM-a, to je opet ne više od ~12.800 (pojednostavio sam, u realnosti 1Mb > 1000kb) jedinica. Ja sam davno, davno planirao baš tako nešto, da napravim RTS gde bi jedna jedinica zauzimala ~40 bajta u memoriji pa da može da se sukobi na hiljade jedinica sa jedne strane, koliko god memorija igraču dozvoljava. Znači, ništa teren, samo jedinice, i to mnogo potrošnih jedinica, u 2d. Vrlo brzo mi je postalo jasno da se konzumacija procesorskog vremena povećava proporcionalno kvadratu broja jedinica na mapi... uz sve moguće optimizacije (jao, šta sve nisam radio... apdejtovao sam AI svake 25. jedinice u jednom ciklusu, kada bi tražili metu radili bi to iz predefinisanih matrica...) nisam mogao da postignem više od 1000 jedinica na mapi a da ne krene da secka. Čak i kad isključim grafičke rutine...

Na stranu činjenica da stvar koja toliko zahteva brz kod nije stvar koju želite da pišete u VBu. I learned that the hard way... Mada je pitanje koliko bi npr. C++ ubrzao stvari. Možda bi moglo da bude do 3 puta više jedinica, ali na kraju bi opet i on zaglibio do potpunog seckanja.

E sad, postoje načini da se ovo zaobiđe... formacije... regimente... pametni flocking algoritmi... "slepe" jedinice..... startovanje programa na superkompjuterima Pentagona... (kao što vidite, bavio sam se ovim problemom )
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

Reljam
Relja Markovic
San Francisco

Član broj: 531
Poruke: 1793
*.client.comcast.net.



+18 Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?17.01.2005. u 00:13 - pre 233 meseci
Naravno da postoji memorijsko ogranicenje, ali ne pricamo o tome. U C&Cu i WC3 su ta ogranicenja oko 150-250 jedinica po strani, sto je bitno manje od memorije - jedna jedinica moze komotno da stane u par stotina bajta.

Uostalom, to i nije toliko bitno jer sami igraci ne mogu da izadju na kraj sa velikim brojem jedinica a da to ima smisla, zato modernije igre i uvede pojmove taktickih grupa, odnosno igrac kontrolise jednu logicku jedinicu koja je sastavljana od nekoliko fizickih.
 
Odgovor na temu

Duck_
Darko Jovanović
Sremska Kamenica

Član broj: 43509
Poruke: 67
62.108.101.*

Sajt: www.google.com


Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?18.01.2005. u 02:57 - pre 233 meseci
Hvala na odgovorima!

U međuvremenu sam shvatio ono što mi je bilo nejasno. Suština onog što me je zanimalo nije u maskimalnom broju jedinica nego u tome što se broj jedinica stalno menja. Do sada sam radio samo sa "običnim" promenjivima pa sam sve njih unapred unosio... Sada sam počeo da koristim nizove (Arrays) pa mi se sve odjenom razjasnilo. Mnogo je lakše nego što sam mislio.

Dark Icarus, da li možeš da okačiš deo koda (ili ceo kod) od tvoje real-time strategije koju pominješ, naravno ako kod nije tvoja poslovna tajna.
 
Odgovor na temu

Dark Icarus
Goran Lalić
Beograd

Član broj: 19775
Poruke: 428
*.med.bg.ac.yu.



+2 Profil

icon Re: Kako kontrolisati neodređen broj elemenata u igri?18.01.2005. u 10:37 - pre 233 meseci
Nema nikakvih problema, igra ionako nije komercijalna. Okačiću ovih dana.
Ali upozoravam te, kod je pisan u Visual Basicu i poprilično je prljav (nejasan, slabo komentarisan i hardkodiran).
In a game of chess you must never let your opponent see your pieces - Zap
Brannigan
 
Odgovor na temu

[es] :: GameDev - Razvoj Igara :: Kako kontrolisati neodređen broj elemenata u igri?

[ Pregleda: 2889 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

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