使用tiledmap编辑地图,使用半透明的图时,在游戏中会显得黑一些,这个问题怎么解决?
环境:windows cocos3.2
一张是编辑器中的,一张是游戏中的
使用tiledmap编辑地图,使用半透明的图时,在游戏中会显得黑一些,这个问题怎么解决?
环境:windows cocos3.2
一张是编辑器中的,一张是游戏中的
没人么?有人遇到过吗
如下fasttmxlayer改draw方法,blendfunc部分
int index = 0;
for(const auto& iter : _primitives)
{
if(iter.second->getCount() > 0)
{
auto& cmd = _renderCommands;
auto blendfunc = _texture->hasPremultipliedAlpha() ? BlendFunc::ALPHA_PREMULTIPLIED : BlendFunc::ALPHA_NON_PREMULTIPLIED;
cmd.init(iter.first, _texture->getName(), getGLProgramState(), blendfunc, iter.second, _modelViewTransform, flags);
renderer->addCommand(&cmd);
}
}
您好我用的是老版的tiledmap,然后我用了fast试过原版就是没这个问题的,但是出现了另一个问题,好像在tiled的层之间添加节点,上层的layer会变得透明高亮的样子。。很是奇怪。。然后据说fast的android bug很多,不知道是不是真的。。
老版不清楚,不过估计也是类似的问题,fast在android上没目前没看到什么奇怪bug
我查了下,发现用fast时,如果在map中添加了一个使用亮色blend的动画,他的上层就会一起用这个亮色的blend。。。
查了下,他没设置blend,然后我在draw的地方设置了个:
auto blendfunc = _texture->hasPremultipliedAlpha() ? BlendFunc::ALPHA_PREMULTIPLIED : BlendFunc::ALPHA_NON_PREMULTIPLIED;
GL::blendFunc(blendfunc.src, blendfunc.dst);
就可以了。。。不知道这样写对性能什么的有没影响。。
出现这个问题的原因是cocos在加载纹理缓存时,如果纹理是RGBA8888,引擎会默认对纹理做透明通道预乘,即ALPHA_PREMULTIPLIED。纹理做不做预乘在渲染的时候blendfunc是不一样的。如果做了预乘而blendf没设置成ALPHA_PREMULTIPLIED渲染出来就不对。