cocos2d 无法更改 ccnode 的不透明度

问题描述 投票:0回答:3

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

cocos2d-iphone
3个回答
2
投票

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


0
投票

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;
}

我认为你可以为

Node
做这样的事情。


0
投票

tween(this.node.getChildByName("Black_Screen").getComponent(UIOpacity)).to(0.2, { opacity: 255 }).start(); 在节点中添加Uiopacity

© www.soinside.com 2019 - 2024. All rights reserved.