工具函数文字描边,CCSprite 描边。

CCRenderTexture * UITool::createStroke(CCObject * label, int size, ccColor3B color, int opacity ,int step  )
{
	CCTextureProtocol * label_texture = dynamic_cast<CCTextureProtocol*>(label);
	CCNode * label_node = dynamic_cast<CCNode*>(label);
	CCRGBAProtocol * label_rgb = dynamic_cast<CCRGBAProtocol*>(label);

	//CCSize labelSize = label_node->getContentSize();
	CCSize labelSize = label_texture->getTexture()->getContentSize();

	CCRenderTexture* rt = CCRenderTexture::create(
		labelSize.width + size * 2,
		labelSize.height + size * 2
		);

	CCPoint originalPos = label_node->getPosition();

	ccColor3B originalColor = label_rgb->getColor();

	GLubyte originalOpacity = label_rgb->getOpacity();

	bool originalVisibility = label_node->isVisible();

	label_rgb->setColor(color);

	label_rgb->setOpacity(opacity);

	label_node->setVisible(true);

	ccBlendFunc originalBlend = label_texture->getBlendFunc();

	ccBlendFunc bf = {GL_SRC_ALPHA, GL_ONE};

	label_texture->setBlendFunc(bf);

	CCPoint bottomLeft = ccp(
		labelSize.width * label_node->getAnchorPoint().x + size, 
		labelSize.height * label_node->getAnchorPoint().y + size);

	CCPoint positionOffset= ccp(
		-labelSize.width / 2,
		-labelSize.height / 2);
	CCPoint position = ccpSub(originalPos, positionOffset);
	rt->begin();

	for (int i=0; i<360; i+= step) // you should optimize that for your needs
	{
		label_node->setPosition(
			ccp(bottomLeft.x + sin(CC_DEGREES_TO_RADIANS(i))*size, bottomLeft.y + cos(CC_DEGREES_TO_RADIANS(i))*size)
			);
		label_node->visit();
	}
	rt->end();

	label_node->setPosition(originalPos);
	label_rgb->setColor(originalColor);
	label_texture->setBlendFunc(originalBlend);
	label_node->setVisible(originalVisibility);
	label_rgb->setOpacity(originalOpacity);

	rt->setPosition(position);

	return rt;
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值