/ / Problem dotyczący algorytmu wykrywania kolizji - javascript

problem z wykrywaniem kolizji - javascript

tutaj jest jsfiddle, nad którym pracuję do tej pory: http://jsfiddle.net/TLYZS/

jeśli debugujesz kod i sprawdzasz kolizjęFunkcja ta pokazuje, że kolizja działa poprawnie, gdy użytkownik nakłada się na inne życzenie postaci w grze bojowej, a kolizja nie powinna działać w następujący sposób:

  1. możesz zauważyć, że kiedy uderzę lub kopnę postać z niewielkiej odległości, funkcja wykrywania kolizji nie działa, nawet jeśli widzisz na ekranie, że użytkownik karze postać
  2. jak mogę naprawić tę funkcję wykrywania kolizji, aby działała poprawnie?

    function Collision(r1, r2) {
    return !(r1.x > r2.x + r2.w || r1.x + r1.w < r2.x || r1.y > r2.y + r2.h || r1.y + r1.h < r2.y);
    }
    

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

Odpowiedzi:

0 dla odpowiedzi № 1

Oto moja stara implementacja JS flash.geom.Rectangle. Spróbuj użyć go w swoim projekcie:

function Rectangle(x, y, w, h)
{
if(!x) x = 0;  if(!y) y = 0;   if(!w) w = 0;  if(!h) h = 0;
this.x = x;      this.y = y;
this.width = w;  this.height = h;
}
Rectangle.prototype.isEmpty = function()    // : Boolean
{
return (this.width<=0 || this.height <= 0);
}
Rectangle.prototype.intersection = function(rec)
{
var l = Math.max(this.x, rec.x);
var u = Math.max(this.y, rec.y);
var r = Math.min(this.x+this.width , rec.x+rec.width );
var d = Math.min(this.y+this.height, rec.y+rec.height);
if(r<l || d<u) return new Rectangle();
else return new Rectangle(l, u, r-l, d-u);
}

Potem zadzwoń

if( !r1.intersection(r2).isEmpty() ) ... // there is a collision