cocos2dx 3.0之判断点击精灵透明区域

来源:互联网 发布:江苏软件考试网 编辑:程序博客网 时间:2024/04/20 05:47

本站文章转载务必在明显处注明:原文链接 http://blog.csdn.net/cjsen/article/details/17241027

前言

在Layer层中 如何判断触摸事件 在图片精灵中,触摸点是否在图片的透明区域

实现

                if(p1.containsPoint(p)){                    int8_t data[4];                    Point touchPoint = node -> convertTouchToNodeSpace(touch);                    Point location = Point((touchPoint.x) * CC_CONTENT_SCALE_FACTOR(), (touchPoint.y) * CC_CONTENT_SCALE_FACTOR());                    RenderTexture* renderTexture = RenderTexture::create(1* CC_CONTENT_SCALE_FACTOR(),1 * CC_CONTENT_SCALE_FACTOR(), Texture2D::PixelFormat::RGBA8888);                    renderTexture->beginWithClear(0,0,0,0);//只保存渲染一个像素的数据                    Point oldPos = node->getPosition();                    Point oldAnchor = node->getAnchorPoint();                    node->setAnchorPoint(Point(0,0));                    node->setPosition(Point(-location.x, -location.y));                    node->visit();                    node->setAnchorPoint(oldAnchor);                    node->setPosition(oldPos);                    glReadPixels(0,0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);                    renderTexture->end();                    renderTexture->release();                    //检测alpha值                    CCLOG("X:%.0f y:%.0f R: %d, G: %d, B: %d, A: %d tag:%d",location.x ,location.y, data[0], data[1], data[2], data[3],this->getTag());                    if(data[0] || data[1] || data[2] || data[3])                    {                        CCLOG("非透明");                    }else{                        CCLOG("透明");                    }                }

其中当触摸事件为已在精灵内部,进而再判断是否在透明区域,其中node为要判断的精灵

0 0