Javascript 织物JS&;正确的碰撞检测

Javascript 织物JS&;正确的碰撞检测,javascript,fabricjs,Javascript,Fabricjs,我正在使用Fabric JS(1.7.13)的当前版本,我需要一些适当的碰撞检测 Fabric JS网站有以下页面: 页面顶部有一个注释: 请注意,交叉点是根据边界框进行检查的,而不是实际的 形状 我在寻找一个解决方案,对实际形状进行碰撞检测 这样的解决方案存在吗 我在这里发现了一些类似的问题,但我发现的所有问题都只在边界框上进行碰撞检测,而不是在形状本身上进行碰撞检测。也许这个代码笔可以帮助您- /* 画布维度设置,使用资源: seiyria引导滑块 https://github.com/

我正在使用Fabric JS(1.7.13)的当前版本,我需要一些适当的碰撞检测

Fabric JS网站有以下页面:

页面顶部有一个注释:

请注意,交叉点是根据边界框进行检查的,而不是实际的 形状

我在寻找一个解决方案,对实际形状进行碰撞检测

这样的解决方案存在吗



我在这里发现了一些类似的问题,但我发现的所有问题都只在边界框上进行碰撞检测,而不是在形状本身上进行碰撞检测。

也许这个代码笔可以帮助您-

/*
画布维度设置,使用资源:
seiyria引导滑块
https://github.com/seiyria/bootstrap-slider
*/
var AdjustCanvasDimensions=函数(){
window.canvas.setHeight(iHeight.getValue());
window.canvas.setWidth(iWidth.getValue());
window.canvas.renderAll();
$('label[for=“canvas width”]”)。文本(iWidth.getValue()+'cm');
$('label[for=“canvas height”]”)。文本(iHeight.getValue()+'cm');
log('Height:'+iHeight.getValue());
//log('Width:'+iWidth.getValue());
}
var iWidth=$(“#画布宽度”).slider().on('slide',AdjustCanvasDimensions).data('slider');
var iHeight=$(“#画布高度”).滑块({
//对
}).on('slide',AdjustCanvasDimensions)。数据('slide');
/*
使用资源的画布设置:
法布里克斯
https://github.com/kangax/fabric.js/
*/
window.canvas=newfabric.canvas('fabriccanvas');
window.counter=0;
var newleft=0;
var edgedetection=20//要捕捉的像素
canvas.selection=false;
功能加减(顶部、左侧、宽度、高度、填充){
window.canvas.add(new fabric.Rect({
前100名,
名称:“矩形”+window.counter,
左:0+新左,
宽度:100,
身高:100,
填充:'rgba(+(Math.floor(Math.random()*256))+','+(Math.floor(Math.random()*256))+','+(Math.floor(Math.random()*256))+',0.75',
是的,
lockScalingX:对,
lockScalingY:是的,
原文:“左”,
原创:“top”,
尺寸:15,
hasRotatingPoint:false,
perPixelTargetFind:对,
}));
window.counter++;
newleft+=200;
}
this.canvas.on('object:moving',function(e){
var obj=e.target;
obj.setCoords();//基于当前角度、宽度和高度设置角点位置坐标
canvas.forEachObject(函数(targ){
activeObject=canvas.getActiveObject();
if(target==activeObject)返回;
if(Math.abs(activeObject.oCoords.tr.x-target.oCoords.tl.x)

沙本帆布
布里特
霍特
对象toevoegen

也许这支笔可以帮助你-

/*
画布维度设置,使用资源:
seiyria引导滑块
https://github.com/seiyria/bootstrap-slider
*/
var AdjustCanvasDimensions=函数(){
window.canvas.setHeight(iHeight.getValue());
window.canvas.setWidth(iWidth.getValue());
window.canvas.renderAll();
$('label[for=“canvas width”]”)。文本(iWidth.getValue()+'cm');
$('label[for=“canvas height”]”)。文本(iHeight.getValue()+'cm');
log('Height:'+iHeight.getValue());
//log('Width:'+iWidth.getValue());
}
var iWidth=$(“#画布宽度”).slider().on('slide',AdjustCanvasDimensions).data('slider');
var iHeight=$(“#画布高度”).滑块({
//对
}).on('slide',AdjustCanvasDimensions)。数据('slide');
/*
使用资源的画布设置:
法布里克斯
https://github.com/kangax/fabric.js/
*/
window.canvas=newfabric.canvas('fabriccanvas');
window.counter=0;
var newleft=0;
var edgedetection=20//要捕捉的像素
canvas.selection=false;
功能加减(顶部、左侧、宽度、高度、填充){
window.canvas.add(new fabric.Rect({
前100名,
名称:“矩形”+window.counter,
左:0+新左,
宽度:100,
身高:100,
填充:'rgba(+(Math.floor(Math.random()*256))+','+(Math.floor(Math.random()*256))+','+(Math.floor(Math.random()*256))+',0.75',
是的,
lockScalingX:对,
lockScalingY:是的,
原文:“左”,
原创:“top”,
尺寸:15,
hasRotatingPoint:false,
perPixelTargetFind:对,
}));
window.counter++;
newleft+=200;
}
this.canvas.on('object:moving',function(e){
var obj=e.target;
obj.setCoords();//基于当前角度、宽度和高度设置角点位置坐标
canvas.forEachObject(函数(targ){
activeObject=canvas.getActiveObject();
if(target==activeObject)返回;
if(Math.abs(activeObject.oCoords.tr.x-target.oCoords.tl.x)