2016-02-23 9 views
1
  • Цвет фона сцены - белый.
  • В сцене есть два спрайтовые узлы (SKSpriteNode) спрайты 1 и Sprite 2 с черными границами и прозрачным фоном.
  • спрайт 2 перемещается.
  • спрайт 2 достигает спрайт 1 и связывается с ним.

То, что я пытаюсь сделать, это слияние два спрайтов контактных границ, когда они контактируют друг с другом. Другими словами: я хочу изменить цвет точек контакта обоих спрайтов в цвет фона сцены. Я попытался сделать это с помощью свойства blendMode. Но похоже, что свойство blendMode работает только с узлом и его родителем.Sprite-Kit: изменить цвет контактов

Работает ли свойство blendMode только с узлом и его родителем? Если да, есть ли способ изменить цвета точек контакта двух «обычных спрайт-узлов»?

Спасибо за любые идеи.

EDIT:

  • цвет фона белый.
  • каждый спрайт прозрачен и имеет границу с черным цветом.
  • когда спрайт контакты ИЛИ движется вдоль границы другого спрайта, черный цвет всех контактных точек обоих спрайтов границ изменения в белый (то есть цвет фона). Цвет всех остальных граничных точек обоих спрайтов остается черным.
  • Я положил еще одну картинку с более подробной информацией.

Заранее благодарен.

merge sprite borders

ответ

1

режим смешивания будет только смешивать текстуры вместе, он не будет удалить эту черную рамку, если вы подаете что-то вроде Xor Blending. Фактический спрайт будет смешаться с буфером кадров адресатов, а не с родителем, поэтому все, что ниже спрайта во время его рендеринга.

Смешивание Sprite в FrameBuffer Завершающий этап рендеринга, чтобы смешать текстуру спрайта в его назначения фреймбуфером. Поведение по умолчанию использует альфа-значения текстуры для смешивания текстуры с целевыми пикселями. Тем не менее, вы можете использовать другие режимы наложения, если хотите добавить другие спецэффекты в сцену.

Вы контролируете поведение смешивания спрайта, используя свойство blendMode. Например, режим смешивания добавок полезен для объединения нескольких спрайтов вместе, например, для огня или освещения. В листинге 2-6 показано, как изменить режим наложения для использования аддитивной смеси.

Источник: https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Sprites/Sprites.html

Чтобы добиться того, что вы ищете, я бы даже не возиться с смешивания, вместо того, чтобы иметь ваш спрайт разбить на 2 суб спрайтов, границы, и внутри цвета.

Что я имею в виду, это сказать, что у вас есть круг с радиусом 10 и толщиной в 1 пиксель. Мы создаем узел, у которого есть ребенок, который является только границей с прозрачной областью в радиусе 10, а другой ребенок имеет радиус 9, который будет заполнен белым.

Установите границы zposition в 0 Установите внутри спрайтов zposition 10.

Когда 2 спрайтов сливаются вместе, вот как будет вынесено рисунок

Sprite 1 граница Sprite 2 граница Sprite 1 внутри Sprite 2 inside

Это даст вам эффект, который вы ищите, когда спрайты слиты вместе.

Конечно, если ваша внутренняя часть имеет прозрачный и не сплошной цвет, тогда у нас есть проблема . (Прямо сейчас вы говорите, что ваш BG белый, поэтому нам не нужна непереносимость, ваша круглая камера белая, но если вы хотите поместить текстуру в BG, то у нас есть проблема.)

Если вы действительно хотите, чтобы ваш круг был «прозрачным», тогда вам нужно сделать снимок фона перед тем, как нарисовать границу, и сделать так, чтобы текстура ваших внутренних кругов.

+0

@KnightOfDragon благодарит вас за ответ. Я отредактировал мой вопрос. – suyama

+0

с вашими изменениями, вы все равно хотите смешение XOR, но, конечно, вам нужно быть осторожным, потому что 2 спрайта должны смешиваться на пустом фоне, тогда вам нужно отключить XOR и добавить фон. Лучше всего создать новый графический контекст, нарисовать спрайты с помощью XOR blending в этом, а затем создать текстуру из этого, создать новый спрайт, который является одновременно объединенными спрайтами и наложить его сверху с помощью userinteractionEnabled, установленного на false – Knight0fDragon

+0

Спасибо @KnightOfDragon. Если я правильно вас понимаю, создав текстуру и создав новый спрайт, который является одновременно объединенными спрайтами, у меня есть только один спрайт в конце. Правильно? Но как я могу обрабатывать (касание, перемещение, положение и т. Д.) С помощью спрайтов отдельно? Мне нужно перемещать, вычислять и т. Д. Каждый спрайт отдельно. Поэтому я не могу объединить спрайты в один спрайт. Мне нужно объединить только контактные контакты обеих границ, чтобы все остальные оставались отдельно. Спасибо. – suyama