刀塔传奇中图片mask混合是如何实现的

本人新手,对cocos2d-x的使用还没有这么熟练,可否麻烦大神贴出代码? 十分感谢

这个得顶上去,想用这种方式节省点资源。。。

同求高手指点迷津!

lz找到好的方法了么

同求 :2::2::2:

Texture2D* openImage(const char* jpgFile,const char* maskFile)
{
std::string name = jpgFile;
name.erase(name.length()-4,4);
std::string outname = name + “.png”;

auto ret = Director::getInstance()->getTextureCache()->getTextureForKey(name);
if(ret)
    return ret;
auto _img = new Image();
auto _jpg = new Image();
auto _mask = new Image();
do 
{
    if(!_jpg->initWithImageFile(jpgFile))
        break;
    if(!_mask->initWithImageFile(maskFile))
        break;
    auto _color = _jpg->getData();
    auto _alpha = _mask->getData();
    auto _w = _jpg->getWidth();
    auto _h = _jpg->getHeight();
    auto _l = _jpg->getDataLen();
    auto _out = new unsigned char;
    for(int idx = 0; idx < _l ; idx++)
    {
        _out      = _color;
        _out = _color;
        _out = _color;
        _out = _alpha;
    }
    _img->initWithRawData(_out,_l*4,_w,_h,4);
    ret = Director::getInstance()->getTextureCache()->addImage(_img,name);
    _img->saveToFile(outname, false);

    CC_SAFE_DELETE(_out);
    break;
} while (1);

CC_SAFE_DELETE(_img);
CC_SAFE_DELETE(_jpg);
CC_SAFE_DELETE(_mask);
return ret;

}

自己去写shader

8l的解决方法虽然可行
但是我个人觉得不建议这样搞。

因为用cpu 来处理图片资源代价太昂贵了。

大哥!!万分感谢你啊!! :2: :2: :2:

3Q~~~~十分感谢

会写shader的话,就不会来这提问了,对图形和shader这块都不了解

这个需一些opengl的知识

这个效果有什么用

— Begin quote from ____

引用第15楼comrade110于2014-09-01 16:26发表的 :
这个效果有什么用 http://www.cocoachina.com/bbs/job.php?action=topost&tid=216007&pid=1043646

— End quote

省资源,缩小最终发行包的size。 一张半透明的png可以用2张jpg来替换掉,可以省很多!

内存消耗变大很多

大神
一张png图片如何分离成一张jpg和一张mask呢,有没有什么工具可以批量制作呢

http://malideveloper.arm.com/cn/develop-for-mali/sample-code/etcv1-texture-compression-and-alpha-channels/

会么? 同在一张纹理中

多谢了,可惜32位的机子用不了

自己写shader和8楼字节改纹理的方法都可以达到相同的表现效果,一个是在渲染过程中有gpu去处理,一个是在生产给GPU渲染的纹理时合成纹理。算法是一样的。但是哪个更实用呢?两个我都试过(我用的是cocos2dx 3.3 lua版本),从易用性上推荐合成纹理的方法。毕竟这个在游戏中是被大量使用的,用OpenGL来改变显示效果对机器的压力也很大,每一帧都要打开OpenGL一次,cocos提供的批量渲染就体现不出来了。cocos的c++层面对渲染树是有优化的。用OpenGL修改的显示对象会失去设置透明度的属性(c++是改了透明值,但是shader里拿到是原始的纹理来改变显示效果)。当然淡入淡出,改变颜色等也不可用。所以大批量使用的话,推荐合成纹理的方法,在游戏开始的初期做好图片的预加载。对运行的游戏效率不会有太大的影响。ps:没试过发这么长的评论,有错的地方多多包含。