使用除Default以外的其他Camera时,无法使用cocos studio中的控件,只能用基本对像,有人知道原因吗?
有什么现象?
提示没这个接口吗?
给下你的代码?
你可以这样试验一下,设置两个Camera,一个是Default,一个是User1
auto _camera=Camera::create();
_camera->setCameraFlag(CameraFlag::USER1);
m_World_Root->addChild(_camera);
m_World_Root->setCameraMask((unsigned short)CameraFlag::USER1,true);
然后向m_World_Root添加控件对像是画不出来的,如果把CameraFlag::USER1,改成CameraFlag::DEFAULT, 一切正常,控件就可以画出来
已解决
一直也没人帮我解决,上周五特意跟踪了一下,今天把我的结果发出来与大家分享,应该是CoCos代码有问题
在CCNode.h中将下面的方法定义为虚方法
virtual void setCameraMask(unsigned short mask, bool applyChildren = true);
在CCProtectedNode中重载这个方法,具体内容如下:
void ProtectedNode::setCameraMask(unsigned short mask, bool applyChildren)
{
_cameraMask = mask;
if (applyChildren)
{
for (const auto& child : _children)
{
child->setCameraMask(mask, applyChildren);
}
for (const auto& child : _protectedChildren)
{
child->setCameraMask(mask, applyChildren);
}
}
}
这类问题有些多,比如ImageView调用了UIScale9Sprite,所以在这个类里也需要重载这个方法
void Scale9Sprite::setCameraMask(unsigned short mask, bool applyChildren)
{
if(_scale9Image)
{
_scale9Image->setCameraMask(mask, applyChildren);
}
if(_topLeftSprite)
{
_topLeftSprite->setCameraMask(mask, applyChildren);
}
if(_topSprite)
{
_topSprite->setCameraMask(mask, applyChildren);
}
if(_topRightSprite)
{
_topRightSprite->setCameraMask(mask, applyChildren);
}
if(_leftSprite)
{
_leftSprite->setCameraMask(mask, applyChildren);
}
if(_centerSprite)
{
_centerSprite->setCameraMask(mask, applyChildren);
}
if(_rightSprite)
{
_rightSprite->setCameraMask(mask, applyChildren);
}
if(_bottomLeftSprite)
{
_bottomLeftSprite->setCameraMask(mask, applyChildren);
}
if(_bottomSprite)
{
_bottomSprite->setCameraMask(mask, applyChildren);
}
if(_bottomRightSprite)
{
_bottomRightSprite->setCameraMask(mask, applyChildren);
}
Node::setCameraMask(mask, applyChildren);
}
必须感谢一下,帮了大忙了,这个问题在cocos2dx-3.3中依然存在!
我们用RichText的时候遇到这个问题了,很奇怪的是,我刚开始不知道应该改Widget的基类Protected Node, 而是直接修改的RichText, 加上setCameraMask方法, 结果是显示出来了RichText下面的node,但是摄像头移动的时候不会消失,一直固定在屏幕上,也不知道什么原理。。。