2012-05-04 20 views
10

में CCSprite ऑब्जेक्ट में स्प्राइट को स्वैप कैसे करें मेरे पास एक ऑब्जेक्ट है जो CCSprite से विरासत में मिला है। मैं इस ऑब्जेक्ट के अंदर से छवि को बदलने के लिए चाहता हूं।कोकोस 2 डी -0

मैं कोकोस 2 डी-एक्स में एक नई सीसीएसप्रेट ऑब्जेक्ट बनाने के बिना छवि (स्प्राइट) कैसे बदलूं?

धन्यवाद, एड्रियन।

उत्तर

12
mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png")); 
इस प्रकार एक समारोह लिखने

अपने कस्टम वर्ग को बदलने के लिए कोई ज़रूरत नहीं .. मेरे लिए आशा है कि इस मदद करता है .. :)

+0

हाँ यह करता है। जिस तरह से मैंने अपनी समस्या को ठीक करने के लिए उपयोग किया था उससे कहीं अधिक सुरुचिपूर्ण। धन्यवाद। – azelez

+0

उत्तर स्वीकार करें और इसे बंद करें लोग उत्तर पोस्ट करना जारी रखेंगे .. :) –

1

मुझे पता चला है, और मैं इसे यहाँ छोड़ मामले में किसी को एक ही समस्या के साथ अटक जाती है:

अपने वस्तु के अंदर है कि CCSprite वस्तु से विरासत में मिला है, के रूप में

void MyObject::UpdateImage(Char * PngName) 
{ 
    /* Create Image */ 
    CCImage *MyImage = new CCImage(); 
    MyImage->initWithImageFile(PngName); /*the pngName is an image file in your resource folder */ 

    /* Create Texture from Image */ 
    CCTexture2D *MyTexture = new CCTexture2D(); 
    MyTexture->initWithImage(MyImage); 

    /* Set the Texture */ 
    this->setTexture(MyTexture); 
} 
2

काम करता है:

mySprite->setDisplayFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("frame_name")); 

इससे पहले कि आप कैश में आप स्प्राइट लोड करने के लिए की जरूरत है:

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_atlas.plist"); 
+0

cocos2d-x 3.x के लिए: 'mySprite-> setSpriteFrame ("frame_name"); ' –

0

के बाद से "CCTextureCache :: sharedTextureCache()" अब पदावनत किया गया है (v.3.13.1) आप बेहतर बनावट कैश मिल चाहते हैं निदेशक से:

auto texture = Director::getInstance()->getTextureCache()->addImage(filePath); 

if (texture) 
{ 
    yourSprite->setTexture(texture); 
} 

स्रोत: http://www.cocos2d-x.org/wiki/Texture_Cache