Autor | Zpráva | ||
---|---|---|---|
SpotRudloff Profil |
#1 · Zasláno: 15. 1. 2012, 18:56:33
Ahoj,
zkouším si vytvořit detekci kolize, ale něják mi to nejde. function collided(a, b) { if((((a['y'] + a['height']) >= b['y']) && ((a['y'] + a['height']) <= b['y'] + b['height'])) && ((a['x'] + a['width']) >= (b['width']) && ((a['x'] + a['width']) <= b['x'] + b['width']))) return 1; } Toto by měla být detekce kolize zprava. Funguje, ale je tu malý problém - nebere to pouze oblast, kde začíná objekt b, ale celý "obdélník". Obrázková ukázka: ![]() Tento obrázek jsem rychle nakreslil v Malování, ale pro praktickou ukázku by to mělo stačit. Funkce v returnu vrací 1, protože 1 bude kolize zprava, 2 zleva, 3 shora a 4 zdola. Nevíte někdo, prosím, jak to vyřešit? |
||
SpotRudloff Profil |
#2 · Zasláno: 15. 1. 2012, 20:16:34
Omlouvám se, jsem jen nepozorný.
function collided(a, b) { if((((a['y'] + a['height']) >= b['y']) && ((a['y'] + a['height']) <= b['y'] + b['height'])) && ((a['x'] + a['width']) >= (b['width']) && ((a['x'] + a['width']) <= b['x'] + b['width']))) return 1; } To co jsem zvýraznil mělo být b['x']. |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
a.x1,a.y1 +---- | [] | ----+ a.x2,a.y2 a = {x1: a['x'], y1: a['y'], x2: a['x'] + a['width'], y2: a['y'] + a['height'] }; b = {x1: b['x'], y1: b['y'], x2: b['x'] + b['width'], y2: b['y'] + b['height'] }; a.y1 > b.y1 ... a.y2 > b.y1 pokud A vstoupi z hora do B a.y1 < b.y2 ... a.y1 < b.y2 pokud A vstoupi ze spodu do B a.x2 > b.x1 a.x2 > b.x2 |
||
Časová prodleva: 11 let
|
0