Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2dx不响应透明区域事件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

在需要对某些图片的不规则点击区域响应事件

思路是遍历图片上的点.如果是透明区域就不响应事件

过程是在hitTest中做


可以写在基类中.如Node,我是写在Widget::Button中,并且没有完全完善,比如只做了buttonNormalRenderer的.大家可以根据思路用在其它地方.

//.h

	//按钮可支持多边形,透明区域不击中
public:
	void setSupportPolygonTouch(bool value){ _supportPolygon = value; }

   protected:
	   bool _supportPolygon;


//.cpp

	//add by jj
	bool Button::hitTest(const Vec2 &pt)
	{
		if (!_supportPolygon || _scale9Enabled)
			return Widget::hitTest(pt);
		Vec2 nsp = this->convertToNodeSpace(pt);
		Rect bb;
		bb.size = _contentSize;
		if (bb.containsPoint(nsp))
		{
			RenderTexture* render = RenderTexture::create(_buttonNormalRenderer->getContentSize().width,_buttonNormalRenderer->getContentSize().height,Texture2D::PixelFormat::RGBA8888);

			Sprite *sprite = static_cast<Sprite*>(_buttonNormalRenderer);
			Texture2D *texture = sprite->getTexture();
			Sprite *tmp = Sprite::createWithTexture(texture,sprite->getTextureRect());
			tmp->setVisible(true);
			tmp->setAnchorPoint(Vec2::ZERO);
			tmp->setPosition(Vec2::ZERO);
			render->beginWithClear(0,0);
			tmp->visit();
			//GLubyte pColor[4];
			//glReadPixels(nsp.x,nsp.y,1,GL_RGBA,GL_UNSIGNED_BYTE,&pColor[0]);
			render->end();
			Director::getInstance()->getRenderer()->render();
			Image *img = render->newImage(false);
			Color4B color = img->getColorAtPos(nsp.x,nsp.y);
			//render->saveToFile("test.png");
			if (color.a || color.b || color.g)
				return true;
		}
		return false;
	}

//关键位置CCImage.h


	Color4B <span style="font-family: Arial,Helvetica,sans-serif;">getColorAtPos</span><span style="font-family: Arial,sans-serif;">(float x,float y)</span>
	{
		Color4B color = { 0,0 };
		int ix = (int)x - 1;
		int iy = (int)y - 1;
		unsigned char *tmp = _data;
		tmp += (iy*getWidth() + ix) * 4;
		color.r = *(tmp++);
		color.g = *(tmp++);
		color.b = *(tmp++);
		color.a = *(tmp++);
		return color;
	};
之前有考虑用glReadPixels.不知道为什么读出来的都是0.求大神解答

大佬总结

以上是大佬教程为你收集整理的cocos2dx不响应透明区域事件全部内容,希望文章能够帮你解决cocos2dx不响应透明区域事件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: