1

UIImage を cocos2d-x CCSprite に変換する方法を知っている人はいますか? 私の最新の試みは次のとおりでした:1.UIImageをpngとして電話に保存します2.pngをCCSpriteとしてロードします

[UIImagePNGRepresentation(photo) writeToFile:imagePath atomically:true];
CCSprite *sprite = CCSprite::spriteWithFile(imagePath);

しかし、これはCCObjectの保持機能でクラッシュしました

void CCObject::retain(void)
{
    CCAssert(m_uReference > 0, "reference count should greater than 0");

    ++m_uReference;
}

そして、Walzer Wangs の提案がどのように機能するかわかりません http://cocos2d-x.org/boards/6/topics/3922

CCImage::initWithImageData(void* pData, int nDataLen, ...)
CCTexture2D::initWithImage(CCImage* uiImage);
CCSprite::initWithTexture(CCTexture2D* pTexture);
4

3 に答える 3

2
CCSprite* getCCSpriteFromUIImage(UIImage *photo) {
    CCImage *imf =new CCImage();
    NSData *imgData = UIImagePNGRepresentation(photo);
    NSUInteger len = [imgData length];
    Byte *byteData = (Byte*)malloc(len);
    memcpy(byteData, [imgData bytes], len);
    imf->initWithImageData(byteData,imgData.length);
    imf->autorelease();
    CCTexture2D* pTexture = new CCTexture2D();
    pTexture->initWithImage(imf);
    pTexture->autorelease();
    CCSprite *sprit = new CCSprite();
    sprit->createWithTexture(pTexture);
    sprit->autorelease();
    DebugLog("size :%f :%f ",sprit->getContentSize().width , sprit->getContentSize().height);

    return sprit;
}
于 2013-02-28T11:11:37.430 に答える
0

私は自分の問題の解決策を得ました。CCDirectorが初期化される前にCCSpriteを作成することはできません。一部の構成設定が欠落しており、cocosはインスタンス化された直後にイメージを解放します。

于 2012-06-29T07:36:12.683 に答える