我发现setopacity功能不适用于我们的一款cocos2d游戏,它使用的是cocos2d 1.0.1。无论我设置什么值,所有 ccnode 的不透明度始终为 255,并且淡入/淡出操作也不起作用。我们还有另一款游戏,它使用相同版本的 cocos2d,但它运行得很好。有谁知道如何解决这个问题吗?
CCNode 实际上没有纹理(图像),因此它们没有不透明度属性。我假设您认为设置 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;
}
我认为你可以为
Node
做这样的事情。
tween(this.node.getChildByName("Black_Screen").getComponent(UIOpacity)).to(0.2, { opacity: 255 }).start(); 在节点中添加Uiopacity