Я искал по всему, и я нашел ответы на вопросы о прямоугольном круге и спрайте. Ничто, что обеспечивает обнаружение столкновений между двумя массивами точек, например,
var poly1=[
[0,0],
[20,50],
[50,70],
[70,20],
[50,0]
];
// each point from one to the next represent a line in the shape, then the last point connects to the first to complete it.
var poly2=[
[50,30],
[40,90],
[70,110],
[90,70],
[80,20]
];
var collided=arraysCollided(poly1,poly2);
Кто-нибудь знает библиотеку, которая может это сделать? В моих исследованиях появилось ничего, что поддерживает именно это, и не связано с какой-либо библиотекой движка.
Например, столкновение срабатывает true
, когда одна или несколько точек внутри многоугольника других.
SAT.js был anser для меня, я просто помещал каждую точку в SAT.Vector
затем в SAT.Polygon
, затем тестировал их с помощью SAT.testPolygonPolygon(SAT.Polygon,SAT.Polygon);
var poly1={
name:"poly2",
x:400,
y:60,
rotation:0,
runner:function(){
},
points:[
[20,-50],
[-30,-50],
[-30,30],
[10,60],
[50,20]
]
};
var poly2={
name:"poly2",
x:50,
y:70,
runner:function(){
this.x+=1;
},
points:[
[-20,-40],
[-60,50],
[10,70],
[50,30],
[30,-20]
]
};
pGon=(poly)=>{
var center=SAT.Vector(0,0);
var pts=[];
for(var i in poly.points){
var point=poly.points[i];
// point = [0:x,1:y]
pts[pts.length]=new SAT.Vector(point[0]+poly.x,point[1]+poly.y);
}
var poly_a=new SAT.Polygon(center,pts);
return poly_a;
};
pCollide=(p1,p2)=>{
var p1_poly=pGon(p1);
var p2_poly=pGon(p2);
var res=new SAT.Response();
var collided=SAT.testPolygonPolygon(p1_poly,p2_poly,res);
console.log(collided);
console.log(res);
return collided;
};
var collided=pCollided(poly1,poly2);
При этом он сопоставляет каждую точку полигону в системе координат, а затем проверяет его оттуда. Итак, collided
= true