3.X如何实现不规则按钮

如题,2.x的实现方式不适合3.x,找方法看源码都没找出好的方案,求大神帮助!

你说的实现,是指啥? 不规则按钮点击么?

对滴,点击图片上没像素的地方不算点击。

这种点击的,用摄像机截个图,然后判断点击的位置是不是空白像素,行不行?可以封装个通用的组件,我本来想弄,后来给忘了····

不行,我拿到texture,但用这个已经无法判断了

emmmm 变化这么大了么···3.x我还没用到这个功能···

自己套个多边形控件不久得了

cc.Intersection.pointInPolygon 查一下这个就知道怎么实现了

我需要点击的是图片,不是多边形 :rofl:

就是图片上面加个多边形碰撞组件,实现不规则按钮

虽然是个解决办法,但这种治标不治本,我太想用这种。

bool Button::AlphaTouchCheck(const Vec2& point)
{

	Image* normalImage = new Image();
	normalImage->initWithImageFile(_normalFileName); //_normalFileName是button默认的那张图片路径
    unsigned char* data = normalImage->getData();
    size_t dataLen = normalImage->getDataLen();
	if (data == NULL)
	{
		return true;
	}

    auto locationInNode = _buttonNormalRenderer->convertToNodeSpace(point);
	int pa = 4 * ((normalImage->getHeight() - (int)(locationInNode.y) - 1) * normalImage->getWidth() + (int)(locationInNode.x)) + 3;

    if ( pa >= dataLen)
    {
        CC_SAFE_DELETE(normalImage);
        CCLOG("AlphaTouchCheck Out of bounds");
        return false;
    }

	unsigned int ap = data[pa];
	if (ap < _alphaTouchValue) //这里判断透明度,小于20就判断为点击无效,课根据自己的需要修改为0等等…
	{
		CC_SAFE_DELETE(normalImage);
		return false;
	}
	else
	{
		CC_SAFE_DELETE(normalImage);
		return true;
	}

return true;

}

这是cocos2dx的
改一改应该可以用在ccc的原生上
你看下有没有帮助
web的俺也不会 :joy:

没用,3.x改动有点多,2.x和2dx都不能做参考

仓考白玉无冰的 polygonSprite 做个多边形Sprite 挂点击事件是否可行?

:sweat_smile:治标不治本呀,最好还是可以根据透明度去做

解决了,思路还是按照这个来https://forum.cocos.org/t/js/37665
区别在于图片的地址信息没了,我找来找去,终于找出来了。

spriteFrame.original._texture.image.url//地址在这里

3.x封装的时候似乎分开了,如果在spriteFrame.texture里面找url,是找不到的,必须要经过original

2赞

图片就是遍历图片数据!!性能消耗巨大!!

你想差了,不会遍历图片

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。