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:
- 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ć
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); }
Odpowiedzi:
0 dla odpowiedzi № 1Oto 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