common-game
Advanced tools
Comparing version 0.0.49 to 0.0.50
{ | ||
"name": "common-game", | ||
"version": "0.0.49", | ||
"version": "0.0.50", | ||
"description": "", | ||
@@ -5,0 +5,0 @@ "main": "common-game.js", |
55
utils.js
@@ -158,12 +158,9 @@ import Quadtree from './libs/quadtree';//四叉树 | ||
calcProj: function (axis, polyArr) {//计算polyArr在轴线axis上的投影,polyArr是一系列点坐标的集合,数组表示 | ||
var v = { | ||
"x": polyArr[0].x, | ||
"y": polyArr[0].y | ||
}; | ||
var v = { "x": polyArr[0], "y": polyArr[1] }; | ||
var d, min, max; | ||
min = max = this.dotV2(axis, v); //计算投影轴与第一个坐标点的点积 | ||
for (var i = 1; i < polyArr.length; i++) { | ||
v.x = polyArr[i].x; | ||
v.y = polyArr[i].y; | ||
d = this.dotV2(axis, v); //计算v到投影轴的距离,遍历出最小和最大区间 | ||
min = max = this.dotV2(axis, v);//计算投影轴与第一个坐标点的点积 | ||
for (var i = 2; i < polyArr.length - 1; i += 2) { | ||
v.x = polyArr[i]; | ||
v.y = polyArr[i + 1]; | ||
d = this.dotV2(axis, v);//计算v到投影轴的距离,遍历出最小和最大区间 | ||
min = (d < min) ? d : min; | ||
@@ -182,27 +179,29 @@ max = (d > max) ? d : max; | ||
//判断两个多边形是否相交碰撞,p1,p2用于保存多边形点的数组 | ||
isCollide: function (p1, p2) { | ||
isCollide: function (point1, point2) { | ||
let p1 = [], p2 = []; | ||
point1.forEach(item => { | ||
p1.push(item.x); | ||
p1.push(item.y); | ||
}) | ||
point2.forEach(item => { | ||
p2.push(item.x); | ||
p2.push(item.y); | ||
}) | ||
//定义法向量 | ||
var e = { | ||
"x": 0, | ||
"y": 0 | ||
}; | ||
var p = p1, | ||
idx = 0, | ||
len1 = p1.length, | ||
len2 = p2.length, | ||
px, py; //p缓存形状p1的数据 | ||
for (var i = 0, len = len1 + len2; i < len - 2; i++) //遍历所有坐标点,i+=2代表xy轴两个坐标点 | ||
var e = { "x": 0, "y": 0 }; | ||
var p = p1, idx = 0, len1 = p1.length, len2 = p2.length, px, py;//p缓存形状p1的数据 | ||
for (var i = 0, len = len1 + len2; i < len - 1; i += 2)//遍历所有坐标点,i+=2代表xy轴两个坐标点 | ||
{ | ||
idx = i; | ||
//计算两个多边形每条边 | ||
if (i >= len1) { //当p1遍历完毕后,p缓存形状p2的数据,从新遍历 | ||
if (i > len1) {//当p1遍历完毕后,p缓存形状p2的数据,从新遍历 | ||
p = p2; | ||
idx = (i - len1); //len2 | ||
idx = (i - len1);//len2 | ||
} | ||
if (i === p.length - 1) { //p包含的点数据组成的最后一个坐标点 | ||
px = p[0].x - p[idx].x; //首尾的x轴相连 | ||
py = p[0].y - p[idx].y; //首尾的y轴相连 | ||
if (i === p.length - 2) {//p包含的点数据组成的最后一个坐标点 | ||
px = p[0] - p[idx];//首尾的x轴相连 | ||
py = p[1] - p[idx + 1];//首尾的y轴相连 | ||
} else { | ||
px = p[idx + 1].x - p[idx].x; //递增的x轴相连 | ||
py = p[idx + 1].y - p[idx].y; //递减的y轴相连 | ||
px = p[idx + 2] - p[idx];//递增的x轴相连 | ||
py = p[idx + 3] - p[idx + 1];//递减的y轴相连 | ||
} | ||
@@ -213,3 +212,3 @@ //得到边的法向量【垂直相交】,即投影轴 | ||
//计算两个多边形在法向量上的投影 | ||
var pp1 = this.calcProj(e, p1); //涵盖到投影轴的最小值与最大值 | ||
var pp1 = this.calcProj(e, p1);//涵盖到投影轴的最小值与最大值 | ||
var pp2 = this.calcProj(e, p2); | ||
@@ -216,0 +215,0 @@ //计算两个线段在法向量上距离,如果大于0则可以退出,表示无相交 |
1949778
35245