2016-09-04 2 views
3

Обновление: похоже, что в iOS 10 исправлена ​​эта проблема. Я обновился до Swift 3 и Xcode 8, и все работает должным образом.Сложность SKCropNode при добавлении дополнительных дочерних элементов SKNode в иерархии


Я столкнулся с этой проблемой пару раз, и теперь я не могу сказать, если это ошибка в SKCropNode или если я просто злоупотребляя его. Возможно, есть кое-какая документация, которую мне не хватает, чтобы объяснить, почему это происходит?


У меня есть узел урожая с прямоугольником прямоугольника 100x100 в качестве маски. Если я поместил в него синий круг, он обрезается правильно.

// Create a crope node with a small square. 
let cropNode = SKCropNode() 
let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100)) 
cropNodeMask.fillColor = UIColor.whiteColor() 
cropNode.maskNode = cropNodeMask 
self.addChild(cropNode) 

// Create a blue circle and put it in the crop node. 
let blueCircle = SKShapeNode(circleOfRadius: 110) 
blueCircle.fillColor = UIColor.blueColor() 
blueCircle.strokeColor = UIColor.clearColor() 
cropNode.addChild(blueCircle) 

enter image description here


Теперь, когда я устанавливаю тот же круг внутри другой пустой SKNode и поместить этот контейнер внутри одного узла культур, подрезание не удается.

// Create a crope node with a small square. 
let cropNode = SKCropNode() 
let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100)) 
cropNodeMask.fillColor = UIColor.whiteColor() 
cropNode.maskNode = cropNodeMask 
self.addChild(cropNode) 

// Create a container to hold the circle. 
let container = SKNode() 
cropNode.addChild(container) 

// Create a blue circle and put it in the container. 
let blueCircle = SKShapeNode(circleOfRadius: 110) 
blueCircle.fillColor = UIColor.blueColor() 
blueCircle.strokeColor = UIColor.clearColor() 
container.addChild(blueCircle) 

enter image description here


Но спрайт в том же контейнере, кажется, быть обрезаны в порядке.

// Create a crope node with a small square. 
let cropNode = SKCropNode() 
let cropNodeMask = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 100, height: 100)) 
cropNodeMask.fillColor = UIColor.whiteColor() 
cropNode.maskNode = cropNodeMask 
self.addChild(cropNode) 

// Create a container to hold the sprite. 
let container = SKNode() 
cropNode.addChild(container) 

// Create a spaceship and add it to the container. 
let spaceshipNode = SKSpriteNode(imageNamed: "Spaceship") 
spaceshipNode.anchorPoint = CGPointZero 
container.addChild(spaceshipNode) 

enter image description here

+0

Попробуйте что-то другое, кроме SKShapeNode, используйте SKLabelNode, я могу сказать, что вы скачали SKShapeNode, что было доказано – Knight0fDragon

+0

Ярлык обрезается правильно. Таким образом, это не узел урожая - это узел формы, который сломан. –

+0

Да, у SKShapeNode есть множество ошибок, лучше всего использовать его, чтобы превратить его в текстуру. – Knight0fDragon

ответ

3

SKShapeNode прослушивается, лучше всего, чтобы избежать любой ценой. Используйте его для создания фигур, а затем преобразуйте его в текстуру для использования с SKSpriteNode

+0

Ух о. Говорил слишком рано. Я удалил все SKShapeNodes из моего проекта в пользу спрайтов, и мой контент все еще ускользает от урожая. Я подозреваю, что когда у меня есть вложенные узлы для урожая, хотя я еще не сварил его до простого воспроизведения. –

+0

Похоже, что ваш ответ частично правильный. SKCropNode и SKShapeNode плохо взаимодействуют, но в этом случае это определенно ошибка SKCropNode, поскольку он также, похоже, терпит неудачу с дочерними SKCropNodes. Аналогичный вывод о [этом ответе] (http://stackoverflow.com/a/26558228/1181827). –

+0

SKCropNodes внутри SKCropNodes производят другой результат, альфа-прозрачное обрезку (теперь уже не просто проблема с выключением, теперь, если ваша альфа составляет 25%, это будет учитываться при обрезке. Имеет отношение к функциям смешивания) – Knight0fDragon

Смежные вопросы