2014-11-12 9 views
5

मैं स्प्राइट किट के साथ चित्रण कर रहा हूं। मैं यह जानना चाहता हूं कि उपयोगकर्ता के चित्र छेड़छाड़ कर रहे हैं।
enter image description hereस्विफ्ट: स्प्राइट किट SKSapeNode चित्रों से छेड़छाड़ का पता लगाने

मैंने कोड का पालन करने की कोशिश की लेकिन यह काम नहीं करता है। ऐसा लगता है कि स्प्राइट किट सभी बिंदुओं को सहेज नहीं रहा है:

override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { 
    /* Called when a touch begins */ 
    touch = touches.anyObject() as UITouch!   
    for drawingPoint in drawingPoints{ 
     if(touch.locationInNode(self) == drawingPoint){println(true)} 
    } 
    drawingPoints.append(touch.locationInNode(self)) 
} 
+1

मैं स्प्राइटकिट से बहुत परिचित नहीं हूं, लेकिन मुझे लगता है कि लाल पथ प्रत्येक टच पॉइंट को लाइन सेगमेंट या बेजियर वक्र का उपयोग करके अगले के साथ जोड़ता है। उस स्थिति में आपको संभावित चौराहे के लिए सभी सेगमेंट देखना होगा। [यहां] (http://stackoverflow.com/questions/13999249/uibezierpath-intersect) उद्देश्य-सी में एक समान समस्या है, शायद यह आपको प्रारंभ करने में मदद करता है। –

+0

धन्यवाद मैं एक नज़र डालेगा! – user3673836

+1

यहां एक अधिक परिष्कृत एल्गोरिदम का वर्णन किया गया है: http://softsurfer.com/Archive/algorithm_0108/algorithm_0108.htm। –

उत्तर

0

यहां स्विफ्ट में सेगमेंट चौराहे के लिए एक फ़ंक्शन है।

func linesIntersect(line1 : CGPointInterval, line2 : CGPointInterval) -> (intersects: Bool, point : CGPoint?) 
    { 
     //The algorithm is taken from http://www.amazon.com/dp/0672323699/?tag=stackoverfl08-20 
     // http://portal.aauj.edu/portal_resources/downloads/programming/windows_game_programming_guru.pdf 

     let p0_x = line1.start.x 
     let p1_x = line1.end.x 
     let p2_x = line2.start.x 
     let p3_x = line2.end.x 

     let p0_y = line1.start.y 
     let p1_y = line1.end.y 
     let p2_y = line2.start.y 
     let p3_y = line2.end.y 

     let s1_x = p1_x - p0_x 
     let s1_y = p1_y - p0_y 
     let s2_x = p3_x - p2_x 
     let s2_y = p3_y - p2_y 

     let s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y))/(-s2_x * s1_y + s1_x * s2_y) 
     let t = (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x))/(-s2_x * s1_y + s1_x * s2_y) 

     if (s >= 0 && s <= 1 && t >= 0 && t <= 1) 
     { 
      // Collision detected 
      let finalX = p0_x + (t * s1_x) 
      let finalY = p0_y + (t * s1_y) 
      return (true, CGPointMake(finalX, finalY)) 
     } 

     return (false, nil) // No collision 
    } 
संबंधित मुद्दे