Окраска CCSprite без использования только его основных цветов - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть CCSprite, который был создан из png с прозрачным фоном.

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

Я пробовал это:

mySprite.color = ccc3 (200,200,255);

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

Идеальный эффект для меня в этом случае - добавить в него голубую маску с очень низким альфа-значением.

Есть ли простой способ сделать это без написания спрайтов?

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

Ответы [ 2 ]

1 голос
/ 16 ноября 2011

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

  • создайте новый спрайт, который будет просто белой версией вашего оригинального спрайта
  • свойство color этого белого спрайта теперь будет точно соответствовать значениям RGB, которые вы передаете
  • , поэтому передайте значение голубого цвета белому спрайту и правильно установите непрозрачность
  • затем наложите его на ваш оригинальный спрайт

Хорошо?

0 голосов
/ 15 ноября 2011

Единственный способ добиться этого - наложить (замаскировать) спрайт на соответствующие функции смешивания OpenGL.Когда вы говорите «добавить голубую маску», то это то, что вам нужно сделать.Вы можете найти этот визуальный инструмент blendfunc полезным, хотя бы для того, чтобы понять, как работает смешивание со спрайтами по маскам и чего вы можете достичь с его помощью.Однако Cocos2D не имеет встроенной поддержки для этого, поэтому вам придется вернуться к чистому OpenGL внутри метода -(void) draw {} узла cocos2d.всего изображения путем изменения цветов вершин всех 4 вершин.

...