最近想做 点击到一个建筑的时候,处理某个事件,由于建筑不是规则图像,所有可能点击到控件的透明区域,点击到透明区域时不响应事件。
我用的环境是vs2012+cocos2d_x3.1
网上查了下相关问题,我用的是这样的代码:
void ViewCity::onTouchEnded(Touch touch, Event unused_event)
{
Node target = static_cast<Node>(unused_event->getCurrentTarget());
Vec2 locationInNode = target ->convertToNodeSpace(touch->getLocation());
Size s = target ->getContentSize();
Rect rect = Rect(0, 0, s.width, s.height);
if(rect.containsPoint(locationInNode))
{
if(
getOpacityWithPoint(target,locationInNode) > 50)
{
//todo处理事件
//发事件给ViewFight界面监听的,这个界面判定选择的对象应该去攻击谁
}
}
}
int ViewCity::
getOpacityWithPoint(Sprite *pSpr, Point point)
{
point.y = pSpr->getContentSize().height-point.y;
//Sprite* pNewSpr = Sprite::createWithSpriteFrame(pSpr->displayFrame());
Sprite* pNewSpr = Sprite::createWithTexture(pSpr->getTexture());
pNewSpr->setAnchorPoint(CCPointZero);
//+截屏操作
RenderTexture* pRender = RenderTexture::create(pSpr->getContentSize().width, pSpr->getContentSize().height, Texture2D::PixelFormat::RGBA8888);
pRender->begin();
pSpr->visit();
pRender->end();
//-截屏操作
Image * pImage = pRender->newImage();
//getColor4B函数是个人加到Image底层的获取像素点颜色的函数
Color4B c = pImage->getColor4B(point.x, point.y);
return c.a;
}
但是上诉代码中,绿底红字部分,得到的pImage的透明度全部是0。根本得不到正确的像素值
注:我的控件上的图片,我是不知道从哪个路径得到的。有方法是:根据Sprite创建的图片路径,重新创建一个Image,当然这样应该没有问题。但是我不知道sprite创建的图片路径。
这个问题我弄了2天了,没解决,求各位大大们,有什么好的方法。