collision detection

Replies: 19 Views: 3,193 Started: Sep 28, 2005, 4:44 PM
collision detection · Sep 28, 2005, 4:44 PM
#12611
znaci htio bih napraviti nekakvu pong igru da mi bude c++ prvijenac... sve je to divno i krasno, ali mene zanima kako da detektiram collisione one loptice sa pravokutnicima od kojih bi se trebala odbijati...

napravio sam algoritam za detekciju collisiona dvaju pravokutnika(tj. sad ga dovrsavam), no prilicno je primitivan.

znaci samo mi treba teoretski malo pojasniti kako da napravim te collisione, zapravo kako ih napraviti i opcenito kada radim sa tijelima koja nisu cetverokuti.


//kolizija

//gore
if((ob.xr >= zid.x && ob.xr <= zid.xr) || (ob.x >= zid.x && ob.x <= zid.xr))
{
if(ob.y >= zid.yd && ob.y <= zid.y)
{
ob.cup = true;
}

}

//dole
if((ob.xr >= zid.x && ob.xr <= zid.xr) || (ob.x >= zid.x && ob.x <= zid.xr))
{
if(ob.yd <= zid.y)
{
ob.cdown = true;

}
}


///ispravljanje
if(ob.cup == true)
{
ob.y-=0.1;
ob.cup = false;
}

if(ob.cdown == true)
{
ob.y+=0.1;
ob.cdown = false;
}


to je za detekciju collisiona gornje i collisiona donje stranice

znaci ob.cup - true je kada postoji kolizija s objektom zid na gornjoj stranici cetverokuta

ob.down - kada je na donjoj stranici kolizija




trebalo bi radit po svoj logici

ali ne radi god damit :-?


ok sad donja radi savrseno a gornja ne radi dobro s ovim kodom


//kolizija

//gore
if((ob.xr >= zid.x && ob.xr <= zid.xr) || (ob.x >= zid.x && ob.x <= zid.xr))
{
if(ob.y >= zid.yd && ob.y <= zid.yd)
{
ob.cup = true;
}

}

//dole
if((ob.xr >= zid.x && ob.xr <= zid.xr) || (ob.x >= zid.x && ob.x <= zid.xr))
{
if(ob.yd <= zid.y)
{
ob.cdown = true;

}
}


///ispravljanje
if(ob.cup == true)
{
ob.y-=1;
ob.cup = false;
}

if(ob.cdown == true)
{
ob.y+=0.01;
ob.cdown = false;
}
Post #2 · Sep 28, 2005, 9:06 PM
#12618
Eh da znam c++ bi pomogo na tome ali ovako ti mogu dati samo PSEUDO code.
Uglavnom, mislim da grijesis na tome sto posebno bacas IF-ove za strane a nebi trebao. Za pravokutnik ti je dovoljan jedan IF sa 3 AND-ova iliti &&

IF A.x+A.width > B.x AND A.x < B.x+B.width AND A.y+A.height > B.y AND A.y < B.y+B.height THEN KOLIZIJA=TRUE ELSE KOLIZIJA=FALSE

I ovo gore ce ti raditi 100%, imas cak i API funkciju gdje joj samo zadas RECT od oba kvadrata i on vraca TRUE/FALSE iliti Boolean vrijednost.

Za detekcije na daljine izmedju objekata (kruzna detekcija).. je skroz drugacije i prilicno jednostavno. Ako mislis koristiti bilo kakav drugaciji oblik ili zarotirani kvadrat imat ces posla preko glave i popizdit ces ko i ja :) Za zombie driver sam izgubio dane i dane dok nisam skuzio kako detektirati kada je tocka unutar zartiranog kvadrata, ma uzas :P
Post #3 · Sep 29, 2005, 12:27 PM
#12631
ovo je nice, no opet me muci kako napraviti opcenitu funkciju od toga, tj. nesto ovakvo:

sudar(ob1, ob2) - i onda ako je true, sudareni su ak nije nisu... ma jos cu malo o tome promozgat, idem malo guglat sigurno ima nest o tome


e jel postoji kakva naredba tj. win api funkcija koja mi daje height i width nekog .bmp -a?
Post #4 · Sep 29, 2005, 2:02 PM
#12639
Ponekad mi nije jasno, za?to gurate takve stvari kada imate besplatne biblioteke za fiziku koja u sebi sadr?avaju funkcije za savr?ene biblioteke.
TV3D ima odličan fizički engine.
Post #5 · Sep 29, 2005, 2:06 PM · edited Sep 29, 2005, 2:06 PM
#12640
GameDeveloper wrote:
imate besplatne biblioteke za fiziku koja u sebi sadr?avaju funkcije za savr?ene biblioteke

Nije mi jasna ova recenica... valjda savrsene detekcije :doh:
Post #6 · Sep 29, 2005, 2:06 PM
#12641
kuzis ja jednostavno ne zelim koristiti tudje, zelim razumjeti kako sve to funkcionira


ok brijem da sam smislio kako napraviti fiziku za tu pong igru... navecer postam rezultate ako ce ih biti :thumbsup:

edit: dovrsih one kolizije na svoj nacin, evo ih ovdje:

http://filebuffer.net/download.php?id=5550438_287_kolizije_pravokutnici.zip

(kontrole : gore dole lijevo desno strelice)
Post #7 · Sep 29, 2005, 6:35 PM
#12648
kuzis ja jednostavno ne zelim koristiti tudje, zelim razumjeti kako sve to funkcionira


Svaka čast :clap: :clap: :clap: :clap:
Post #8 · Sep 29, 2005, 7:16 PM
#12653
CrashStar wrote:
kuzis ja jednostavno ne zelim koristiti tudje, zelim razumjeti kako sve to funkcionira


Da, to ima odredjenu tezinu i dozu zasluzenog respekta. Vjeruj mi tako ces i dalje dogurat. Jer poznato je da oni koji prepisuju u skoli ne doguraju onoliko koliko doguraju oni od kojih se prepisuje.

A barba Gates?
A nemoj sad barbu Gatesa...

Naravno ova planeta je dokazala da su i druge stvari, osim znanja, bitne.
Post #9 · Sep 29, 2005, 10:37 PM
#12660
Nesto me zeza download link, mozda jer sam na wireless-u i uzasno slab signal...

Ja isto vise volim svoje/nase nego li koristiti tudje, mozda jedino da vidim kako su to drugi rijesili pa da naucim inace ne :| nema veceg zadovoljstva od zadovoljstva samostalnog uspjeha .. takvo se najvise cijeni ;)
Post #10 · Sep 30, 2005, 8:14 AM
#12671
da, ja isto koristim tudje jedino da naucim kako napraviti vlastito

u biti, prednost programiranja u C++u je potpuna kontrola nad svim dijelovima programa, a tu prednost ne mogu iskoristiti ako sam koristio vec gotove funkcije iz free librarya
Post #11 · Oct 1, 2005, 9:06 PM
#12749
Ja sam znao i jos uvjek znam koristiti tudje funkcije ali ne i DLL-ove.. jer na tudjemu najbrze i ucim. Pogotovo kada optimiziram i prilagodjavam potrebama te iste funkcije.
Post #12 · Oct 2, 2005, 8:52 AM
#12762
edifreak wrote:
Ja sam znao i jos uvjek znam koristiti tudje funkcije ali ne i DLL-ove.. jer na tudjemu najbrze i ucim. Pogotovo kada optimiziram i prilagodjavam potrebama te iste funkcije.


naravno, nije moguce uvijek biti originalan, jer ne postoji beskonacno mnogo nacina na koje se nesto moze pravilno isprogramirati, no ako cu koristiti tako librarye itd., onda se mogu vratiti game makeru, jer tamo ce sve to ionako ici jos lakse
Post #13 · Oct 2, 2005, 3:11 PM · edited Oct 2, 2008, 4:49 PM
#12770
-------
Post #14 · Oct 2, 2005, 3:43 PM
#12772
2d zasad
Post #15 · Oct 2, 2005, 4:37 PM · edited Oct 2, 2008, 4:49 PM
#12775
------
Post #16 · Oct 2, 2005, 4:46 PM
#12777
a da, skuzih :)


pa ono, sve ovisi, zasad imam krugove i pravokutnike, tj. kolizija kruga s pravokutnikom


kasnije ce doc spriteovi s transparentnim dijelovima, a to cu rjesit ovisno po potrebi
Post #17 · Oct 3, 2005, 10:03 AM
#12814
Mmmm pixel collision :P i like it!

A za krug vs. kvadrat:
sva cetri kuta usporedis sa udaljenosti od centra tog nekog kruga i tako znas kada je collision... kuzis?
Post #18 · Oct 3, 2005, 10:16 AM
#12818
To cak i ja kuzim :D
Post #19 · Oct 3, 2005, 10:34 AM
#12820
Bravo nix :clap: ma ti si rodjeni programer :P
Post #20 · Oct 3, 2005, 11:57 AM
#12847
-----

Sign in to reply

Replies are available for existing members only! For now 😅

Sign in