您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 检测是否点击到了图片的透明区域

2014-07-25 14:18 441 查看
直接上代码

bool FurnitureBase::clickMe(CCPoint p)
{

bool k = false;
for (int i = 0; i<rightAppearanceArray->count(); ++i)
{
Q5Sprite* qp =(Q5Sprite*) (rightAppearanceArray->objectAtIndex(i));
if (qp->boundingBox().containsPoint(p))
{
int8_t data[4];
CCPoint touchPoint = qp->convertToNodeSpace(baseLayer->convertToWorldSpace(p));

CCPoint location = CCPoint((touchPoint.x), (touchPoint.y) );
CCRenderTexture* renderTexture = CCRenderTexture::create(1,1,kCCTexture2DPixelFormat_RGBA8888);
// CCLOG("%f",renderTexture->getAnchorPoint().x);
renderTexture->beginWithClear(0,0,0,0);//只保存渲染一个像素的数据
CCPoint oldPos = qp->getPosition();
CCPoint oldAnchor = qp->getAnchorPoint();
qp->setAnchorPoint(CCPoint(0,0));
qp->setPosition(ccp(-location.x, -location.y));
qp->visit();
qp->setAnchorPoint(oldAnchor);
qp->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());
//CCLOG("%f____________",-location.x);
//CCLOG("%f____________",-location.y);
//CCLOG("%d____________",data[2]);
//CCLOG("%d____________",data[3]);
if(data[3])
{
//CCLOG("非透明");
k = ture;
break;
}else{
// CCLOG("透明");
}
}
}

return k;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: