【问题标题】:Cocos2d How to use CCC4?Cocos2d 如何使用 CCC4?
【发布时间】:2011-01-17 20:32:40
【问题描述】:

任何人都对如何将 ccc3 转换为 ccc4 甚至只是一个宏有任何想法! 我目前正在使用 CCMotion streak,它需要我使用 ccc4,但我不知道什么组合会产生什么颜色! 请任何帮助将不胜感激! 谢谢

【问题讨论】:

    标签: colors cocos2d-iphone


    【解决方案1】:

    来自 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);
    

    【讨论】:

    • 您好,感谢您的帖子!您认为您可以解释如何使用您发布的代码吗?谢谢
    • 好吧,我非常抱歉,但我还是不明白。再次解释一下,基本上我使用的是 CCMotionStreak,它需要我使用 ccc4,我想将我的 ccc3 颜色转换为 ccc4。如果可能的话,你能做一个项目并在线发布代码吗?只是我尝试这样做的提示: CCMotionStreak *streak = [CCMotionStreak streakWithFade:2 minSeg:0 image:@"Stars.png" width:32 length:32 color:ccc4FFromccc3B(255,0,0)];但它给出了3个错误!再次感谢。
    • cocos2D 有一个例子(叫做motionStreakTest)。您的代码不起作用,因为您需要 ccColor4B 并且您正在尝试放置 ccColor4F
    • 感谢您通知我,但是您知道如何将 ccColor4B 转换为 ccc3 吗?谢谢
    • 只是为了结构——编写你自己的转换器。如果这对您来说很难 - 在编写一些复杂的应用程序之前考虑学习 c
    【解决方案2】:

    对于任何与 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();
    

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多