View previous topic :: View next topic |
Author |
Message |
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Sun Feb 10, 2008 12:18 pm Post subject: 2D collision detection |
|
Ir sekojoša situācija: 2D uz tailiem bāzeta spēle par tanciņiem :)
Mana kolīzija darbojas pēc principa: ja tails, kas ir tankam priekša ir caurejams, tad var braukt uz priekšu.
Taču rodas problēma kad tanciņš stāv pa vidu (ne gluži pa vidu, lielākā tā daļa ir uz vērsta uz caurejamo tailu) 2 tailiem, viens caurejams otrs nē. Rodas situācija kad es varu braukt sienā jo priekšā esošais tails, uz kuru ir vērsta lielākā tanka daļa, ir caurejams...
Neesmu pārliecināts ka izskaidroju sevi skaidri, bet ja kāds būs ko līdzīgu darīji sapratīs... |
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Sun Feb 10, 2008 2:31 pm Post subject: |
|
Tavs slengs man ir mazliet nesaprotams...
Pie tam vai box-box kolīzija ir laba ideja tāda tipa aplikācijā? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Feb 10, 2008 2:58 pm Post subject: |
|
box-box ir pietiekami vienkāršs, lai būtu ok, un tas laikam arī būs visprecīzākā pārbaude tavam gadījumam.
Dabūt vienu kvadrātu/taisnstūri, kas visciešāk aptver tava tanciņa formu. Un tad salīdzini šo četrstūri ar necaurejamajo kartes blociņu koordinātēm. Tiem pat nevajag to četrstūri glabāt, to koordinātes var easy izrēķināt no kartes pozīcijas. Un taisnstūra sadursmi pret taisnstūri ir ļoti viegli pārbaudīt. Ja nemaldos, tad tāds kods te formuā jau vairākas reizes ir ticis dots. Gūglē arī viegli tādu atrast (meklē aabb collision). |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Sun Feb 10, 2008 3:16 pm Post subject: |
|
Ok, paldies! Tas man aizņems kādu laiku lai apsmadzeņotu jauno informāciju |
|
Back to top |
|
|
MoKa
Joined: 10 Oct 2007 Posts: 79 Location: Daugavpils
|
Posted: Mon Feb 11, 2008 4:22 pm Post subject: |
|
ИМХО с массивов лучше не переходить. Между такнками, да тут придётся юзать коллизию (но не факт).
Если у тебя тайлы всегда формы кубика, (нету других размеров), тогда массив это лучший варриант.
Но тут нужна качественная проверка.
Я проверял в таких солучаях по 4 точкам (углы танка). Всё очень просто, т.к. передвижение только в 4 направлениях, так вот, проверяй свободен ли путь для движения в определённом направлении для точек того края который считается передом исходя из предпологаемого направления движения.
Но если будут более сложные формы, или тонкие объекты, тогда Box-Box или Sphere-Line(статичная), было бы весьма удобно, но это уже для более сложных систем построения уровня - чаще не тайловом. _________________ Текущий Инструментарий: BlitzMax + Xors3D + FastImage + PhysX + sFXe |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Feb 11, 2008 5:05 pm Post subject: |
|
4 stūru pārbaude būs gandrīz tas pats kas aabb tankam. Īsti nekādas priekšrocības tur neradīsies. |
|
Back to top |
|
|
spicausis
Joined: 23 Jan 2006 Posts: 85 Location: Teika
|
Posted: Wed Feb 13, 2008 3:02 pm Post subject: |
|
Skatoties uz uzzīmēto tanciņu šķiet, ka būtu feināk un izskatīsies labāk, ja forma būtu mazliet sarežģītāka un tanciņu definēs divi taisnstūri, viens korpusam, un otrs krān^Wstobram, lai otrajā attēlā redzamais tanks varētu vēl pabraukt kapeiku uz priekšu. |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Fri Feb 15, 2008 2:19 pm Post subject: |
|
Mazliet pačakarējoties laikam atradu risinājumu savām problēmām :)
Code: |
sum_extents.x = (a.max.x - a.min.x) + (b.max.x - b.min.x);
sum_extents.y = (a.max.y - a.min.y) + (b.max.y - b.min.y);
double_center_to_center.x = (b.min.x + b.max.x) - (a.min.x + a.max.x);
double_center_to_center.y = (b.min.y + b.max.y) - (a.min.y + a.max.y);
return fabsf(double_center_to_center.x) < sum_extents.x &&
fabsf(double_center_to_center.y) < sum_extents.y; |
P.S. Tanciņš pagāidām ir kāds ir, grafiku taisīšu tad kad viss pārējais darbosies.. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Feb 15, 2008 2:30 pm Post subject: |
|
ceru, ka tas tev neskaitās AABB collision check kods..
jo to var izdarīt daudz vienkāršāk:
Code: |
bool CheckBB(BBOX b1, BBOX b2)
{
return (b1.x1 < b2.x2) && (b1.x2 > b2.x1) &&(b1.y1 < b2.y2) && (b1.y2 > b2.y1);
}
|
kautkā šitā laikam bija.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Fri Feb 15, 2008 2:36 pm Post subject: |
|
Varbū mans kods ir mazliet no citas operas bet savu uzdevumu tas pilda |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Feb 15, 2008 2:36 pm Post subject: |
|
bet vai ātrāk? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Fri Feb 15, 2008 2:42 pm Post subject: |
|
Droši vien ka nav Bet ar tevis doto piemēru iepriekš ņemoties man sanāca tikai atrast vai punkts pieder plaknei... |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Fri Feb 15, 2008 2:46 pm Post subject: |
|
nu nez, vajadzētu manam strādāt..
bet ātrāks būs tāpēc, ka..
neveido jaunus mainīgos funkcijas lietošanas laikā
neizpilda funkcijas
un nelieto tik daudz darbības, pietam.. (ja C++), tad, ja kāda no pirmajām nevienādībām starp && ir nepatiesa, nākošās netiek testētas _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Inf3rnal
Joined: 15 Jun 2006 Posts: 118 Location: Neverland
|
Posted: Fri Feb 15, 2008 3:12 pm Post subject: |
|
Nevaru iebraukt kā lai es tagad salīdzinu kartē esošo necaurejamo objektu koordinātes ar tenciņa koorinātēm... Ja es ielikšu ciklu kurš katrreiz pārskatīs visu karti uz sakritībām tas taču būs ļoti lēni? |
|
Back to top |
|
|
|