非透明区域点击判断

新开发的游戏主城内建筑比较多、间距小,使用touch优先级判断不够准确,所以找了一个可以判断非透明区域点击的方法。

先前测试发现,G7机器上面有闪烁问题(黑一下,可能是GPU不够好),后来为了解决手机发热问题,将fps调整到30,次问题也消失了(巧合,本来打算使用控制刷新区域来解决的)。

bool isTouchInTexture(CCNode* pNode, CCTouch* touch)

{

    unsigned char data[4];

    //获得点击的OpenGL的世界坐标值

    CCPoint touchPoint = pNode->convertTouchToNodeSpace(touch);

    CCPoint location = ccp((touchPoint.x) * CC_CONTENT_SCALE_FACTOR(), (touchPoint.y) * CC_CONTENT_SCALE_FACTOR());

    CCRenderTexture* renderTexture = CCRenderTexture::create(1* CC_CONTENT_SCALE_FACTOR(),1 * CC_CONTENT_SCALE_FACTOR(), kCCTexture2DPixelFormat_RGBA8888);

    //只保存渲染一个像素的数据

    CCPoint oldPos = pNode->getPosition();

    CCPoint oldAnchor = pNode->getAnchorPoint();

 

    pNode->setAnchorPoint(ccp(0,0));

    pNode->setPosition(ccp(-location.x, -location.y));

    

    renderTexture->beginWithClear(0,0,0,0);

    pNode->visit();

    glReadPixels(0,0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, data);

    renderTexture->end();

    

    pNode->setAnchorPoint(oldAnchor);

    pNode->setPosition(oldPos);


    //检测alpha值

    if(data[0] || data[1] || data[2] || data[3])

    {

        //非透明

        return true;

    }

    return false;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值