Cocos2d как использовать CCC4?
У кого-нибудь есть идеи о том, как конвертировать ccc3 в ccc4 или даже просто макрос! В настоящее время я использую ccmotion streak, и это требует от меня использовать ccc4, но я не знаю, какая комбинация делает какой цвет! Пожалуйста, любая помощь будет оценена! Спасибо
2 ответов
из ccTypes.h
typedef struct _ccColor4B
{
GLubyte r;
GLubyte g;
GLubyte b;
GLubyte a;
} ccColor4B;
//! helper macro that creates an ccColor4B type
static inline ccColor4B
ccc4(const GLubyte r, const GLubyte g, const GLubyte b, const GLubyte o)
{
ccColor4B c = {r, g, b, o};
return c;
}
Для пример:
ccColor4b myColor = ccc4(255, 0, 0, 255);
создает сплошной красный цвет
снова из ccTypes.h
/** Returns a ccColor4F from a ccColor3B. Alpha will be 1.
@since v0.99.1
*/
static inline ccColor4F ccc4FFromccc3B(ccColor3B c)
{
return (ccColor4F){c.r/255.f, c.g/255.f, c.b/255.f, 1.f};
}
если этого недостаточно для вашего написать свой собственный конвертер, как последний
EDIT:
если у вас ccColor3B myColor3B
и ccColor4F myColor4F
просто используйте конвертер:
myColor4F c = ccc4FFromccc3B(myColor3B);
если вы хотите иметь ccColor4B написать свой собственный конвертер:
static inline ccColor4B ccc4BFromccc3B(ccColor3B c)
{
return (ccColor4F){c.r, c.g, c.b, 255};
}
и используйте его так:
ccColor4B c = ccc4BFromccc3B(myColor);
для тех, кто имеет ту же проблему с CocosSharp (порт Xamarin C# Cocos2D):
чтобы преобразовать CCColor3B в CCColor4F, вы можете передать CCColor3B в качестве аргумента конструктору CCColor4F. Например:
var color = new CCColor4F (CCColor3B.Red);
CCColor4B не имеет конструктора с CCColor3B в качестве аргумента, поэтому вы должны передать отдельные значения для красного, зеленого и синего, как показано ниже:
var sourceColor = CCColor3B.Red;
var color = new CCColor4B (sourceColor.R. sourceColor.G, sourceColor.B);
мне нравится создавать методы расширения для инкапсуляции выше, следующим образом:
public static class ColorExtensions
{
public static CCColor4F ToColor4F(this CCColor3B sourceColor)
{
return new CCColor4F (sourceColor);
}
public static CCColor4B ToColor4B(this CCColor3B sourceColor)
{
return new CCColor4B (sourceColor.R, sourceColor.G, sourceColor.B);
}
}
таким образом, вы можете выполнить преобразования, используя следующее:
var bColor = CCColor3B.ToColor4B();
var fColor = CCColor3B.ToColor4F();