2015-10-05 20 views
6

Tôi đang tạo một trò chơi mê cung và tôi đang sử dụng SKSpriteNode làm mê cung 2d thực tế.SpriteKit: Làm thế nào tôi có thể lấy màu pixel từ một điểm trong SKSpriteNode?

Tôi muốn phát hiện xem điểm trên SKSpriteNode mà người dùng đang chạm là màu đen hay trắng. Tôi đã tạo một UIImage giống với SKSpriteNode và tôi đang sử dụng một phương thức trên UIImage để lấy thông tin pixel. Tuy nhiên, UIImage có vẻ bù đắp so với SKSpriteNode. Nó trả về các giá trị khi tôi di chuyển ngón tay của mình trên màn hình, nhưng nó không chính xác. Tôi đoán UIImage không có cùng kích thước và vị trí như SKSpriteNode.

Làm cách nào để khắc phục sự cố này?

tôi sử dụng những điều sau đây để có được những dữ liệu pixel

extension UIImage { 
func getPixelColor(pos: CGPoint) -> UIColor { 

    let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage)) 
    let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData) 

    let pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4 

    let r = CGFloat(data[pixelInfo])/CGFloat(255.0) 
    let g = CGFloat(data[pixelInfo+1])/CGFloat(255.0) 
    let b = CGFloat(data[pixelInfo+2])/CGFloat(255.0) 
    let a = CGFloat(data[pixelInfo+3])/CGFloat(255.0) 

    return UIColor(red: r, green: g, blue: b, alpha: a) 
} 

}

Tôi đã thực hiện SKSpriteNode của tôi như thế này

var theColor : UIColor = UIColor() 
var bgImage = SKSpriteNode(imageNamed: mazeImageName) 
var mazeMap : UIImage = UIImage(named: mazeImageName)! 

override func didMoveToView(view: SKView) { 

    bgImage.position = CGPointMake(self.size.width/2, self.size.height/2) 
    bgImage.size = CGSize(width: self.size.width, height: self.size.height) 

    self.addChild(bgImage) 

} 

Và đây là nơi tôi thực sự có được màu sắc điểm ảnh

override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 

    if let touch = touches.first { 

     theColor = (mazeMap.getPixelColor(touch.locationInNode(self))) 

     var red : CGFloat = CGFloat() 
     var green : CGFloat = CGFloat() 
     var blue : CGFloat = CGFloat() 
     var alpha : CGFloat = CGFloat() 

     theColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 

     print("Red: \(red), Green: \(green), Blue: \(blue), Alpha: \(alpha)") 

    } 

} 
+0

_I muốn phát hiện xem điểm trên SKSpriteNode mà người dùng đang chạm là màu đen hay trắng._ Tại sao không đặt '' '' '' '' '' '' '' '' '' và xác định màu đen hoặc trắng bằng 'tên'? – WangYudong

Trả lời

1

Kích thước của hình ảnh có cùng kích thước với số SKScene của bạn không?

Trong chức năng touchesBegan, Thử tìm vị trí của liên lạc của bạn bên trong bgImage thay vì SKScene.

theColor = (mazeMap.getPixelColor(touch.locationInNode(bgImage))) 
Các vấn đề liên quan