2012-12-15 14 views
6

'object:moving'イベントを監視しながらfabric.Rectが他のfabricと重複するときを判断しようとしていますが、fabric間で結果が一致しません.Group vs fabric.RectFabricjs intersectsWithObjectがObjectがfabric.Rectのときにfalseを返す

私は、Rectインスタンスを介してグループを移動すると、intersectsWithObjectメソッドはtrueを返しますが、別のRectインスタンス上でRectインスタンスを移動すると、falseを返します。

ここで何か間違っているのでしょうか?

は、ここで私はフィドルを作成した私のイベントハンドラ

cvs.observe('object:moving', function(e) { 

    var targ = e.target; 

    // filter out itself 
    var items = cvs.getObjects().filter(function(o){ 
     return targ !== o; 
    }); 

    var hit = false; 

    for (var i = 0, n = items.length; i < n; i++) { 
     var m = items[i]; 

     if (targ.type == "group") { 
      if (targ.intersectsWithObject(m)) { 
       targ.setFill("red"); 
       hit = true; 
       console.log("GROUP HIT"); 
      } else { 
       if (!hit) { 
        targ.setFill("#CCCCCC"); 
       } 
      } 
     } 
     else { 
      // this is always returning false! why? 
      if (targ.intersectsWithObject(m)) { 
       var id = m.data ? m.data.entityId : " ??" 
       console.log("OBJECT HIT:" + id); 
       targ.setFill("red"); 
      } 
     } 
    } 
}); 

です。 2つ以上のブロックを選択してグループ化してみてください。グループ化されたオブジェクトが他のファブリック上にドラッグされると、赤くなります.Rectまたはfabric.Groupインスタンス。あなたはどんなタイプの別のfabric.Objectの上に単一のRectをドラッグすると、それは決して私が見つけた

http://jsfiddle.net/cyberpantz/9MkYJ/27/

答えて

7

... intersectsWithObjectは常にfalseを返すよう赤色に変わりありません明示的に)(myObj.setCoordsを呼び出すことによって、従来のものmyObj.intersectsWithObject(otherObj)を呼び出すと、問題が修正されます。

私は

...それは移動させながらfabric.Group座標がある一方で、私はここでオフベースすることができるがfabric.Rect座標は、自動的に更新されていないように見えるここ http://jsfiddle.net/cyberpantz/9MkYJ/29/

フィドルを更新 更新

(簡体)コード

cvs.observe('object:moving', function(e) { 

    var targ = e.target; 

    // this fixes it 
    targ.setCoords(); 

    var items = cvs.getObjects().filter(function(o){ 
     return targ !== o; 
    }); 

    var hit = false; 

    for (var i = 0, n = items.length; i < n; i++) { 
     var m = items[i]; 

     if (targ.intersectsWithObject(m)) { 
      targ.setFill("red"); 
      hit = true; 
     } 
     else { 
      if (!hit) { 
       targ.setFill("#CCCCCC"); 
      } 
     } 
    } 
}); 
+0

setCoords()素晴らしい、それをしません! – cincplug

関連する問題