cocos2d无法改变ccnode的不透明度

时间:2013-02-22 21:02:13

标签: cocos2d-iphone

我发现setopacity函数不适用于我们的一个cocos2d游戏,它使用的是cocos2d 1.0.1。无论我设置什么值,所有ccnode的不透明度始终为255,并且fadein / fadeout操作也不起作用。我们有另一个游戏使用相同版本的cocos2d,但那个游戏完美无缺。有没有人对如何解决这个问题有任何线索?

2 个答案:

答案 0 :(得分:2)

CCNodes实际上没有纹理(图像),因此它们没有不透明度属性。我假设您认为设置CCNode的不透明度会影响其子节点,但它不会。不透明度仅影响您为其设置不透明度的对象的纹理。您可以设置CCSprite的不透明度,因为它具有纹理,但这样做不会影响CCSprite的子项。如果要影响多个CCSprite的不透明度,则必须循环遍历所有子项,并为每个子项设置不透明度。

答案 1 :(得分:0)

Basic DrawNode也无法自行处理不透明度(此功能在cocos2d-4。*的计划中)。

您可以从NodeDrawNode继承您的课程,并像这样实施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执行类似的操作。