2014-11-11 15 views
5

Tôi có một ứng dụng spritekit được viết nhanh và tôi muốn lấy màu trên điểm ảnh mà ngón tay của tôi đang chạm vào.Làm cách nào để nhận được màu pixel khi chạm từ bên trong SKScene?

Tôi đã xem nhiều bài đăng về vấn đề này và đã thử tất cả chúng nhưng không thể ghép nối để làm cho nó hoạt động cho tôi. Accourding để đăng bài khác nó sẽ có thể để có được màu sắc từ một UIView và như là một SKScene có một SKIView mà kế thừa từ UIView nó sẽ có thể để có được màu sắc từ đó.

Vì vậy, để đặt câu hỏi dễ dàng và dễ hiểu, tôi có một ví dụ.

Tạo ứng dụng spritekit mới và thêm hình ảnh vào đó. Trong trường hợp của tôi, tôi đã tạo ra một hình ảnh png 200x200 pixel với nhiều màu sắc khác nhau trong đó.

Đây là tập tin GameScene.swift, nó là file duy nhất mà tôi đã thay đổi từ tự động tạo:

import SpriteKit 

extension UIView { 
    func getColorFromPoint(point:CGPoint) -> SKColor { 
     var pixelData:[UInt8] = [0,0,0,0] 

     let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceRGB() 
     let bitmapInfo = CGBitmapInfo(CGImageAlphaInfo.PremultipliedLast.toRaw()) 
     let context = CGBitmapContextCreate(&pixelData, 1, 1, 8, 4, colorSpace, bitmapInfo) 

     CGContextTranslateCTM(context, -point.x, -point.y); 
     self.layer.renderInContext(context) 

     var red:CGFloat = CGFloat(pixelData[0])/CGFloat(255.0) 
     var green:CGFloat = CGFloat(pixelData[1])/CGFloat(255.0) 
     var blue:CGFloat = CGFloat(pixelData[2])/CGFloat(255.0) 
     var alpha:CGFloat = CGFloat(pixelData[3])/CGFloat(255.0) 

     var color:SKColor = SKColor(red: red, green: green, blue: blue, alpha: alpha) 
     return color 
    } 
} 

class GameScene: SKScene { 

    var myColorWheel:SKSpriteNode! 

    override func didMoveToView(view: SKView) { 
     let recognizerTap = UITapGestureRecognizer(target: self, action:Selector("handleTap:")) 
     view.addGestureRecognizer(recognizerTap) 

     myColorWheel = SKSpriteNode(imageNamed: "ColorWheel.png") 
     myColorWheel.anchorPoint = CGPoint(x: 0, y: 0) 
     myColorWheel.position = CGPoint(x: 200, y: 200) 
     self.addChild(myColorWheel) 
    } 

    func handleTap(recognizer : UITapGestureRecognizer) 
    { 
     let location : CGPoint = self.convertPointFromView(recognizer.locationInView(self.view)) 
     if(myColorWheel.containsPoint(location)) 
     { 
      let color = self.view?.getColorFromPoint(location) 
      println(color) 
     } 
    } 
} 

Chẳng ảnh hưởng gì nơi tôi nhấn vào hình ảnh trên màn hình, kết quả là luôn: Optional(UIDeviceRGBColorSpace 0 0 0 0)

+0

Bạn đã thử sử dụng 'kCGImageAlphaPremultipliedLast' thay cho' bitmapInfo'? – rmp

Trả lời

0

bạn đã cố gắng để có một bản chụp đầu tiên sử dụng:

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates 

Sau đó, chọn các màu sắc từ quan điểm cho rằng?

Không chắc chắn cách hệ thống hiển thị .layer trong SKView.

Hy vọng điều đó sẽ hữu ích.

Chúc mừng

Các vấn đề liên quan