【发布时间】:2011-01-17 20:32:40
【问题描述】:
任何人都对如何将 ccc3 转换为 ccc4 甚至只是一个宏有任何想法! 我目前正在使用 CCMotion streak,它需要我使用 ccc4,但我不知道什么组合会产生什么颜色! 请任何帮助将不胜感激! 谢谢
【问题讨论】:
标签: colors cocos2d-iphone
任何人都对如何将 ccc3 转换为 ccc4 甚至只是一个宏有任何想法! 我目前正在使用 CCMotion streak,它需要我使用 ccc4,但我不知道什么组合会产生什么颜色! 请任何帮助将不胜感激! 谢谢
【问题讨论】:
标签: colors cocos2d-iphone
来自 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};
}
如果您像上一个那样编写自己的转换器还不够
编辑:
如果你有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(Cocos2D 的 Xamarin C# 端口)有相同问题的人:
要将 CCColor3B 转换为 CCColor4F,您可以将 CCColor3B 作为参数传递给 CCColor4F 的构造函数。例如:
var color = new CCColor4F (CCColor3B.Red);
CCColor4B 没有以 CCColor3B 作为参数的构造函数,因此您必须传入 Red、Green 和 Blue 的单独值,如下所示:
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();
【讨论】: