cocos2d判断精灵某点颜色是否有效

cocos2d判断精灵某点颜色是否有效,第1张

概述用了一段时间的Cocos2d-3.x,遇到一个问题,就是判断触摸的精灵像素是否有效,而cocos并没有获取Sprite某一点像素值的方法。 在网上看到有人通过保存Image像素的方法,来记录像素值。或者通过Image::initWithImageFile 来实现获取像素值。 前者浪费内存,后者浪费性能。今天来分享一下我的实现方法 /** * 判断Sprite某点像素值是否有效 * @author

用了一段时间的Cocos2d-3.x,遇到一个问题,就是判断触摸的精灵像素是否有效,而cocos并没有获取Sprite某一点像素值的方法。

在网上看到有人通过保存Image像素的方法,来记录像素值。或者通过Image::initWithImagefile 来实现获取像素值。

前者浪费内存,后者浪费性能。今天来分享一下我的实现方法

/** * 判断Sprite某点像素值是否有效 * @author devefx * @date 2016/8/13 */bool isNonInvalIDPixel(Sprite* sprite,const Point& point){    Rect rect = sprite->getBoundingBox();    if (rect.containsPoint(point))    {        Glint oldFBO;        glGetIntegerv(GL_FRAMEBUFFER_BINDING,&oldFBO);        gluint frameBuffer;        glGenFramebuffers(1,&frameBuffer);        glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);        glFramebufferTexture2D(GL_FRAMEBUFFER,GL_color_ATTACHMENT0,GL_TEXTURE_2D,sprite->getTexture()->getname(),0);        CCASSERT(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE,"Could not attach texture to framebuffer");        Rect frameRect = sprite->getSpriteFrame()->getRectInPixels();        // subtract anchor point        Glint x = point.x - rect.getMinX();        Glint y = point.y - rect.getMinY();        // convert left-handed        y = frameRect.size.height - 1 - y;        // add frame origin        x = x + frameRect.origin.x;        y = y + frameRect.origin.y;        color4B color;        glPixelStorei(GL_PACK_AlignmENT,1);        glreadPixels(x,y,1,GL_RGBA,GL_UNSIGNED_BYTE,&color);        glBindFramebuffer(GL_FRAMEBUFFER,oldFBO);        glDeleteFramebuffers(1,&frameBuffer);        return color.a != 0;    }    return false;}

主要是使用FBO关联已经加载的texture,再通过glreadPixels来获取像素值

总结

以上是内存溢出为你收集整理的cocos2d判断精灵某点颜色是否有效全部内容,希望文章能够帮你解决cocos2d判断精灵某点颜色是否有效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1081332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存