【问题标题】:Cocos2d: Solid color rectangular sprite?Cocos2d:纯色矩形精灵?
【发布时间】:2010-07-27 00:33:28
【问题描述】:

我一定是错过了什么!

我想创建一个实心矩形 CCSprite,其背景颜色已初始化为特定的 RGB 值。我翻遍了所有文档,找不到任何东西。

有没有办法将 CCSprite 的背景初始化为特定颜色? 我不想为我需要的每种颜色都包含一个纯色 PNG。

救命!

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

    用代码来做!如果您不想弄乱图像文件,这是您的方法:

    - (CCSprite*)blankSpriteWithSize:(CGSize)size
    {
        CCSprite *sprite = [CCSprite node];
        GLubyte *buffer = malloc(sizeof(GLubyte)*4);
        for (int i=0;i<4;i++) {buffer[i]=255;}
        CCTexture2D *tex = [[CCTexture2D alloc] initWithData:buffer pixelFormat:kCCTexture2DPixelFormat_RGB5A1 pixelsWide:1 pixelsHigh:1 contentSize:size];
        [sprite setTexture:tex];
        [sprite setTextureRect:CGRectMake(0, 0, size.width, size.height)];
        free(buffer);
        return sprite;
    }
    

    然后您可以根据需要设置颜色、大小和不透明度。 ;)

    【讨论】:

    【解决方案2】:

    CCSprite 有一个color 类型为ccColor3B 的属性:

    - (ccColor3B) color [read, assign]
    RGB colors: conforms to CCRGBAProtocol protocol    
    
    Definition at line 145 of file CCSprite.h.
    

    来源:CCSprite 参考。

    您可以使用 ccc3() 轻松构造 ccColor3B 结构:

    ccc3(const GLubyte r, const GLubyte g, const GLubyte b)
    

    参考:ccColor3B 参考。

    【讨论】:

    • 贾斯汀,谢谢那是我正在做的......当然,额外的技巧是正确设置纹理矩形!!!
    • 谢谢@poundev23,这就是我要找的
    【解决方案3】:

    我在cocos2d cookbook 找到了答案。以下代码来自该书的第 1 章,可免费预览。

    -(CCSprite *) rectangleSpriteWithSize:(CGSize)cgsize color:(ccColor3B) c
    {
        CCSprite *sg = [CCSprite spriteWithFile:@"blank.png"];  
        [sg setTextureRect:CGRectMake( 0, 0, cgsize.width, cgsize.height)];
        sg.color = c;   
        return sg;  
    }
    

    是的,这仍然需要外部图像文件。但是使用这个 1x1 的小“blank.png”,您可以生成具有任意大小和颜色的纯色矩形精灵。

    【讨论】:

      【解决方案4】:

      我从来没有让 CCSprite 像那样工作。我只使用 CCLayerColor。

      CCLayerColor* layercolorHalftransparentred = [CCLayerColor layerWithColor:ccc4(255, 0, 0, 128)];
      

      【讨论】:

        【解决方案5】:

        对于遇到这个问题的任何人(比如我); Matjan 的代码似乎不再适用于 cocos 2d 3.x。请参阅下面的适用于我的更改版本:

        + (CCSprite*)blankSpriteWithSize:(CGSize)size
        {
            GLubyte *buffer = malloc(sizeof(GLubyte)*4);
            for (int i=0;i<4;i++) {buffer[i]=255;}
            CCTexture *tex = [[CCTexture alloc] initWithData:buffer pixelFormat:CCTexturePixelFormat_RGBA8888 pixelsWide:1 pixelsHigh:1 contentSizeInPixels:size contentScale:1];
            CCSprite *sprite = [CCSprite spriteWithTexture:tex rect:CGRectMake(0,0,size.width,size.height)];
            free(buffer);
            return sprite;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多