2015-10-02 3 views
0

В моей игре SpriteKit у меня есть прокручиваемый узел с узлом обрезки, поэтому он не отображается на весь экран. Я сделал узел с черным цветом и очень маленьким альфа-значением, и он работал, чем я ожидал.SKCropNode не работает должным образом в Xcode 7 + Swift 2

let rectNode = SKSpriteNode(color: UIColor(red: 0, green: 0, blue: 0, alpha: 0.000001), size: CGSize(width: width, height: height - 100)) 
    rectNode.position = CGPoint(x: 0, y: 0) 
    rectNode.zPosition = 1 
    rectNode.anchorPoint = CGPoint(x: 0, y: 0)     

    rectNode.addChild(contentNode)   

    let cropNode = SKCropNode() 
    cropNode.maskNode = rectNode.copy() as! SKSpriteNode 
    cropNode.addChild(rectNode) 
    cropNode.zPosition = 9 

    addChild(cropNode) 

С XCode 7 мой узел содержимого не видно, если я изменю альфа rectNode до 1, содержание видна с черным фоном, так что я думаю, что что-то случилось с маскировкой.

Я делаю что-то неправильно или это ошибка в Xcode 7?

+0

Что такое 'contentNode'? Можете ли вы включить код, в котором вы его создаете? –

+0

var contentNode: JADSKScrollingNode = JADSKScrollingNode (размер: CGSize (ширина: UIScreen.mainScreen(). Bounds.wh.w, height: UIScreen.mainScreen(). Bounds.wh.h)) – szilagyif

ответ

2

Посмотрев на свой код, я на самом деле не уверен, как он работает в Xcode 6. Поскольку маска представляет собой прямоугольник с почти нулевой альфа-буквой, он не должен фактически препятствовать отображению пикселей SKCropNode - это , он не должен иметь никакого эффекта. От the docs:

Если пиксель в маске имеет альфа-значение менее 0,05, пиксель изображения маскируется.

Все пиксели в вашем узле маски имеют альфа < 0,05, поэтому целое число rectNode должно быть невидимым.

Это поможет дать им более четкие имена и создать свой видимый контент и маску отдельно. Попробуйте что-то вроде этого:

let contentNode = SKSpriteNode() // Whatever you want to have displayed and cropped. 
// adjust contentNode's position and size 

let cropNode = SKCropNode() 
// adjust cropNode's position and size 

let maskNode = SKSpriteNode() 
// adjust maskNode's position and size 
maskNode.color = UIColor.blackColor() // If you're not going to use an image for this, you need to fill it with a color. The black part will act as a "window", with everything outside of it being invisible. 

cropNode.maskNode = maskNode 
cropNode.addChild(contentNode) 
+1

Спасибо за ваш ответ. Я должен был сделать небольшую модификацию, чтобы заставить ее работать. Мне нужно было обернуть свой прокручиваемый contentNode внутри другого узла, и я добавил этот узел-обертку в cropNode. Без этого мой contentNode был невидим. Оказалось, что мой предыдущий код не должен был запускаться, это было просто совпадение. – szilagyif