| 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: 14 let
|
|||
0
