同样的问题,一种替代解决方案。首先,我使用getImageData数据来查找围绕精灵的多边形。这里要小心,因为该实现适用于具有透明背景且具有单个实体对象的图像。像一艘船。下一步是Ramer Douglas Peucker Algorithm以减少多边形中顶点的数量。我最终得到了一个很少顶点的多边形,它很容易便宜地旋转,并检查每个精灵与其他多边形的碰撞。
http://jsfiddle.net/rnrlabs/9dxSg/
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
var img = document.getElementById("img");
context.drawImage(img, 0,0);
var dat = context.getImageData(0,0,img.width, img.height);
// see jsfiddle
var startPixel = findStartPixel(dat, 0);
var path = followPath(startPixel, dat, 0);
// 4 is RDP epsilon
map1 = properRDP(path.map, 4, path.startpixel.x, path.startpixel.y);
// draw
context.beginPath();
context.moveTo(path.startpixel.x, path.startpixel.x);
for(var i = 0; i < map.length; i++) {
var p = map[i];
context.lineTo(p.x, p.y);
}
context.strokeStyle = 'red';
context.closePath();
context.stroke();
我无法找到答案,我问这个问题太:( – super 2013-12-26 14:27:38