2013-02-22 26 views
1

我發現setopacity函數不適用於我們的cocos2d遊戲之一,它使用的是cocos2d 1.0.1。無論我設置了什麼值,所有ccnodes的不透明度始終爲255,並且淡入淡出/淡出操作也不起作用。我們有另一款遊戲使用了相同版本的cocos2d,但其中一款完美無缺。有沒有人有任何關於如何解決這個問題的線索?cocos2d無法更改ccnode的不透明度

+0

向我們展示了代碼...還有,你有什麼嘗試?實際上是否調用了setOpacity?什麼節點類?請明確點。 – LearnCocos2D 2013-02-22 22:03:26

+0

我在多個地方有setOpacity並且它們都沒有工作,CCSprite中的opacity_屬性是正確的值,但它沒有效果。所以我猜這個庫有些問題,或者我不小心打開了一些禁用不透明度設置的選項。 – user1898387 2013-02-25 15:54:32

回答

2

CCNodes實際上並沒有紋理(圖像),所以它們沒有不透明屬性。我假設你認爲設置CCNode的不透明度會影響它的孩子,但它不會。不透明度僅影響您設置不透明度的對象的紋理。您可以設置CCSprite的不透明度,因爲它具有紋理,但這樣做不會影響CCSprite的子項。如果您想要影響多個CCSprite的不透明度,則必須循環遍歷所有的子項,併爲每個子項設置不透明度。

+0

另請注意,最新版本的cocos2d具有不透明度等屬性的級聯選項。你可能想看看它。 – dqhendricks 2013-03-26 18:51:11

0

基本DrawNode無法自行處理不透明度(該功能位於cocos2d-4。*的計劃中)。

您可以從NodeDrawNode inherite您的類並實現setOpacity這樣的:

void AlphaNode::setOpacity(GLubyte opac) { 
mOpacity = opac; 
if (_bufferCount) { 
    for (int i = 0; i < _bufferCount; i++) { 
     _buffer[i].colors.a = mOpacity; 
    } 
} 

if (_bufferCountGLPoint) { 
    for (int i = 0; i < _bufferCountGLPoint; i++) { 
     _bufferGLPoint[i].colors.a = mOpacity; 
    } 
} 

if (_bufferCountGLLine) { 
    for (int i = 0; i < _bufferCountGLLine; i++) { 
     _bufferGLLine[i].colors.a = mOpacity; 
    } 
    _dirtyGLLine = true; 
} 
_dirty = true; 
} 

,我認爲你能爲Node做這樣的事情。