2016-12-22 22 views
4

Скажем, например, я создаю SKShapeNode и создаю для него детей (пример - это крест и две его пересекающиеся линии). Крест является родителем, а пересекающиеся линии - это дети. Как вы могли изменить альфа-значение всех детей родителя? В настоящее время только с помощью:Swift 3 (SpriteKit): изменение альфа-значения родителя, которое влияет на всех детей.

parent.alpha = 0.5 

не изменяет значение альфа своих детей.

Если кто-то может создать шейдер, который может решить эту проблему или использовать любой другой способ, ответьте. Это сообщение в ответе на мой предыдущий пост: (Swift: Make translucent overlapping lines of the same color not change color when intersecting) Я пытаюсь сделать темные пятна, где пересекаются полупрозрачные линии, если кто-то может решить эту проблему.

Вот код, как пример:

let nodeParent = SKShapeNode() 
let nodeOne = SKShapeNode(circleOfRadius: 5) 
let nodeTwo = SKShapeNode(circleOfRadius: 5) 

//Set the color of the circles, I'm not sure if this is the right way 
nodeOne.fillColor = UIColor.init(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0) 
nodeTwo.fillColor = UIColor.init(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) 

nodeParent.addChild(nodeOne) 
nodeParent.addChild(nodeTwo) 
addChild(nodeParent) 

nodeParent.alpha = 0.5 

Я взял скриншот проблемы при использовании линии вместо кругов:

Спасибо.

+0

Это должно сработать. Родительский узел, у которого есть дети, у которых есть дети, у которых есть дети ... прозрачность этого родителя одинаково влияет на всех своих детей. Если все дети были с непрозрачностью 1,0, а родительский - на 0,5, то все дети станут 0.5. Если дети начали жить на уровне 0,5, а родительский - на 1,0, а затем изменив родительскую сторону на 0,5, уменьшите прозрачность детей до 0,25 – Confused

+0

. Я добавляю всех детей в родительский с альфа-версией 1.0, а изменение альфы родительского По какой-то причине это влияет. Это то, что я пытаюсь понять. –

+0

argh, тогда определенно что-то не так с отношениями, между родителями и детьми. Можете ли вы показать больше кода? Это действительно должно сработать. – Confused

ответ

3

Это правильное и предполагаемое поведение для blendModes SpriteKit, в основном потому, что у них нет режима смешивания, подобного виду, который игнорирует все то же, что и сам.

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

В моем ответе на ваш предыдущий вопрос я избегал кумулятивного рендеринга, «сплющивая» обе оси креста в текстуру, а затем загружая эту текстуру как SpriteNode, одноразовый объект рендеринга, который не имеет пересечений, потому что это все одна вещь.

Все, что вы хотите избежать такого кумулятивного, последовательного эффекта рендеринга менее полной непрозрачности, потребует от вас сначала «сгладить» его со всеми объектами/линиями/фигурами со 100% непрозрачностью, во-первых, затем применить изменения непрозрачности для получения альфа-эффектов.

Вот почему я сказал в этом первом «ответе», что на самом деле это не решение вашей большой проблемы, а просто способ получить желаемый результат.

Без особого вида игнорирует режим рендеринга, SpriteKit не может выполнять наложения без кумулятивного воздействия на все, что меньше, чем полная непрозрачность.

+0

Хорошо, я просто пытался получить другое мнение по этому поводу, чтобы узнать, есть ли у кого-нибудь другие обходные пути. Кажется, вы не правы. Проблема с текстурами заключается в том, что они медленные, и я создаю новый один раз в секунду. –

+0

@ J.Treutlein Эти SKShapeNodes, которые вы используете, делают вашу игру медленной, а не текстурой. SpriteKit может отображать много текстур с помощью атласов (используя атласы). Это нельзя сказать для SKShapeNode. Он требует (по крайней мере) одного обратного вызова при визуализации. Подробнее [здесь] (http://stackoverflow.com/a/31610775/3402095) или [здесь] (http://stackoverflow.com/a/31699990/3402095) Если у вас есть как 50+ SKShapeNodes на экране , то вы, вероятно, столкнетесь с серьезными проблемами производительности. Как указано в документах, его следует использовать экономно. – Whirlwind

+0

@ J.Treutlein Подробнее о пакетном рендеринге: http://stackoverflow.com/q/22851983/3402095 (см. Сообщения LearnCocos2D). – Whirlwind