Autor Zpráva
SpotRudloff
Profil
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
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'].
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
Podobne budes mit asi chybu i v te druhe podmince pro x.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: