【问题标题】:How to Convert a CCSprite image to UIImage?如何将 CCSprite 图像转换为 UIImage?
【发布时间】:2012-10-19 15:04:18
【问题描述】:

作为标题,我已经提到了下面的代码

CCSprite *sprite = (CCSprite *)node;
CCTexture2D *texture2d = [sprite texture];

如何从 sprite 中获取 UIImage *p?

【问题讨论】:

    标签: cocos2d-iphone uiimage ccsprite


    【解决方案1】:

    在您的情况下,只需将下一个方法添加到您的课程中:

     - (UIImage *) imageFromSprite :(CCSprite *)sprite
    {
        int tx = sprite.contentSize.width;
        int ty = sprite.contentSize.height;
    
        CCRenderTexture *renderer   = [CCRenderTexture renderTextureWithWidth:tx height:ty];
    
        sprite.anchorPoint  = CGPointZero;
    
        [renderer begin];
        [sprite visit];
        [renderer end];
    
        return [renderer getUIImage];
    }
    

    使用方法:

    CCSprite *sprite = (CCSprite *)node;
    UIImage *p = [self imageFromSprite:sprite]
    

    【讨论】:

    • 不知道我做错了什么,但使用这个图像变得非常错位。
    • 您在渲染之前更改了锚点。稍后需要将其更改回原来的值。
    【解决方案2】:

    呃……

    我认为这是一个更好的方式。将此添加为 CCNode 上的类别。

    -(UIImage*)image {
        CCRenderTexture* renderer = [CCRenderTexture renderTextureWithWidth:self.contentSize.width height:self.contentSize.height];
    
        const CGPoint ANCHORBEFORE = self.anchorPoint;
        self.anchorPoint = CGPointZero;
    
        [renderer begin];
        [self visit];
        [renderer end];
        self.anchorPoint = ANCHORBEFORE;
    
        return [renderer getUIImage];
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 cocos2d 2.x,请将 sprite 渲染到 CCRenderTexture 并调用该渲染纹理的 getUIImage 方法。

      【讨论】:

        【解决方案4】:

        通过查看CCSprite和CCTexture2D的源代码可以看出,图像仅用于创建纹理数据,图像对象没有保留,而是暂时使用。

        CCTexture2D 来源:

        http://code.google.com/p/cocos2d-iphone/source/browse/trunk/cocos2d/CCTexture2D.m?r=1882

        CCSprite来源:

        http://code.google.com/p/cocos2d-iphone/source/browse/trunk/cocos2d/CCSprite.m?r=1747

        查看使用 CGImageRef 的 init 方法

        【讨论】:

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