Cocos2d iphone cocos2d无法更改ccnode的不透明度

Cocos2d iphone cocos2d无法更改ccnode的不透明度,cocos2d-iphone,Cocos2d Iphone,我发现setopacity函数不适用于我们的cocos2d游戏,它使用的是cocos2d1.0.1。无论我设置了什么值,所有CCNode的不透明度始终为255,并且fadein/fadeout操作也不起作用。我们有另一个游戏,它使用的是相同版本的cocos2d,但这一个完美的作品。有人知道如何解决这个问题吗?CCNodes实际上没有纹理(图像),因此它们没有不透明度属性。我假设您认为设置CCNode的不透明度会影响其子节点,而不会。不透明度仅影响正在为其设置不透明度的对象的纹理。可以设置CCSp

我发现setopacity函数不适用于我们的cocos2d游戏,它使用的是cocos2d1.0.1。无论我设置了什么值,所有CCNode的不透明度始终为255,并且fadein/fadeout操作也不起作用。我们有另一个游戏,它使用的是相同版本的cocos2d,但这一个完美的作品。有人知道如何解决这个问题吗?

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

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

您可以从
Node
DrawNode
继承类,并实现
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;
}
void AlphaNode::setOpacity(GLubyte opac){
mOpacity=opac;
如果(_bufferCount){
对于(int i=0;i<\u bufferCount;i++){
_缓冲区[i].colors.a=mOpacity;
}
}
如果(_bufferCountGLPoint){
对于(int i=0;i<\u bufferCountGLPoint;i++){
_bufferGLPoint[i].colors.a=mOpacity;
}
}
如果(_bufferCountGLLine){
对于(int i=0;i<\u bufferCountGLLine;i++){
_BUFFERGLINE[i].colors.a=mOpacity;
}
_dirtyGLLine=true;
}
_肮脏=真实;
}

我认为您可以为
节点执行类似操作

显示代码。。。还有,你试过什么?setOpacity真的被调用了吗?什么节点类?具体一点。我在多个地方设置了不透明度,但都不起作用,CCSprite中的不透明度属性是正确的值,但没有效果。所以我猜这个库有问题,或者我无意中打开了一些选项,禁用了不透明度设置。另外请注意,最新版本的cocos2d有一个级联选项,用于不透明度等属性。你可能想看看它。