AppUtils 常用函数总结(Cocos2d-x 3.9)

前端之家收集整理的这篇文章主要介绍了AppUtils 常用函数总结(Cocos2d-x 3.9)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1、随机函数

float AppUtils::randomFloat(float low,float high)
{	
	//0.0-1.0
	float r = rand()/(RAND_MAX+0.1);
	return ((high+1) - low) * r + low;
}

2、点击区域判断
CCRect AppUtils::boundingBoxForWorld(CCNode* node)
{
	CCRect rect = CCRectZero;
	if (node==NULL)
	{
		return rect;
	}
	CCPoint anchorPoint = node->getAnchorPoint();
	CCSize widgetSize = node->boundingBox().size;
	CCPoint worldPosition = node->getPosition();
	worldPosition.x -= widgetSize.width*anchorPoint.x;
	worldPosition.y -= widgetSize.height*anchorPoint.y;
	if (node!=NULL)
	{
		CCNode* parent = node->getParent();
		while (parent != NULL)
		{
			float scaleX = parent->getScaleX();
			float scaleY = parent->getScaleY();
			float scaledWidth = widgetSize.width*scaleX;
			float scaledHeight = widgetSize.height*scaleY;
			worldPosition.x += (widgetSize.width - scaledWidth) / 2;
			worldPosition.y += (widgetSize.height - scaledHeight) / 2;
			widgetSize.width = scaledWidth;
			widgetSize.height = scaledHeight;

			worldPosition = worldPosition + parent->getBoundingBox().origin;
			parent = parent->getParent();
		}
		rect.origin = worldPosition;
		rect.size= widgetSize;
		return rect;
	}
	return rect;
}

3、触摸方法模拟按钮的触摸点击
static void setColorForAll(Sprite* target,Color3B color= Color3B::GRAY);
static void btnTouchBegin(Sprite* target,Point p,Color3B color = Color3B::GRAY);
static void btnTouchMoved(Sprite* target,Color3B color = Color3B::WHITE);
static bool btnTouchEnded(Sprite* target,Color3B color = Color3B::WHITE);

方法实现:
void AppUtils::setColorForAll(Sprite* target,Color3B color)
{
	if (target != NULL)
	{
		target->setColor(color);
		Vector<Node*> children = target->getChildren();
		for (size_t i = 0; i < children.size(); i++)
		{
			Sprite* item = (Sprite*)children.at(i);
			if (item != NULL)
			{
				item->setColor(color);
			}
		}
	}
}

void AppUtils::btnTouchBegin(Sprite* target,Color3B color)
{
	if (target != NULL&&target->boundingBox().containsPoint(p))
	{
		setColorForAll(target,color);
	}
}

void AppUtils::btnTouchMoved(Sprite* target,Color3B color)
{
	if (target != NULL&&!target->boundingBox().containsPoint(p) && (target->getColor()== Color3B::GRAY))
	{
		setColorForAll(target,color);
	}
}

bool AppUtils::btnTouchEnded(Sprite* target,Color3B color)
{
	if (target != NULL&&target->boundingBox().containsPoint(p) && (Color3B::GRAY==target->getColor()))
	{
		setColorForAll(target,color);
		return true;
	}
	return false;
}

猜你在找的Cocos2d-x相关文章