1

我发现 setopacity 功能不适用于我们的一款 cocos2d 游戏,它使用的是 cocos2d 1.0.1。无论我设置什么值,所有 ccnode 的不透明度始终为 255,并且淡入/淡出操作也不起作用。我们还有另一款使用相同版本 cocos2d 的游戏,但它运行良好。有没有人知道如何解决这个问题?

4

2 回答 2

2

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

于 2013-02-25T17:44:52.773 回答
0

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

Node您可以从或继承您的类DrawNodesetOpacity像这样实现:

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.

于 2016-09-13T09:39:48.897 回答