2012-12-15 11 views
6

पर हस्ताक्षर करें। मैं यह निर्धारित करने की कोशिश कर रहा हूं कि कपड़े कब होता है। 'ऑब्जेक्ट: मूविंग' ईवेंट को देखते हुए जांच करें लेकिन कपड़े के बीच असंगत परिणाम प्राप्त करें। समूह बनाम कपड़े। संदर्भFabricjs intersectsWithObject ऑब्जेक्ट कपड़े होने पर झूठी लौट रहा है।

जब मैं एक रेक्ट उदाहरण intersectsWithObject विधि सच रिटर्न से अधिक समूह ले जाते हैं, लेकिन जब मैं एक और रेक्ट उदाहरण पर एक रेक्ट उदाहरण चलती हूँ यह गलत देता है।

मैं अगर मैं गलत यहाँ कुछ कर रहा हूँ सोच रहा हूँ।

यहाँ मेरी ईवेंट हैंडलर

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"); 
      } 
     } 
    } 
}); 

है मैं एक बेला बना लिया है। उन्हें समूह में दो या अधिक ब्लॉकों का चयन करके देखें। आप समूहीकृत वस्तु लाल हो जाने पर यह किसी भी अन्य fabric.Rect या fabric.Group उदाहरण के ऊपर खींच लिया है देखेंगे। जब आप किसी भी प्रकार का एक और fabric.Object आने वाले एक रेक्ट खींचें, यह कभी नहीं लाल intersectsWithObject हमेशा गलत लौटा रहा है के रूप में बदल जाता है ...

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

उत्तर

7

मैंने पाया कि स्पष्ट रूप से फोन करके myObj.setCoords() से पहले बुला myObj.intersectsWithObject (otherObj) समस्या ठीक होती है।

मैं बेला यहाँ http://jsfiddle.net/cyberpantz/9MkYJ/29/

ऐसा लगता है कि fabric.Rect निर्देशांक स्वचालित रूप से जब यह जाया जा रहा है fabric.Group निर्देशांक हैं, जबकि अद्यतन नहीं कर रहे हैं, हालांकि मैं ऑफ आधार यहाँ हो सकता है अद्यतन ...

अपडेट किया गया (और सरलीकृत) कोड

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

संबंधित मुद्दे