好记性不如铅笔头

C && C++, cocos2dx, 编程

cocos2dx学习笔记:指示针效果的实现

有时我们做瞄准类游戏时,目标可能会飞出屏幕外,这时我们可以使用一个指示针来提示用户,如下图:

代码的实现其实也很简单,只要计算好了坐标值,设置一下就可以了。如下图:

这里简要的笔记下实现代码:

void fun()
{
//==>>首先找到目标pos和枪口pos。
	CCPoint targetPos = m_pTarget->getPosition();
	CCPoint gunPos = m_pGun->getPosition();
//==>>获得可视区域大小,其中目标和枪口均是m_pVisibleArea的child。
	CCSize visibleSize = m_pVisibleArea->getContentSize();


//==>>判断目标是否在可视区域内
	if (visibleSize.width < targetPos.x || visibleSize.height < targetPos.y || targetPos.x < 0 || targetPos.y < 0)
	{
	//==>>不在可视区域,那么就显示指示针
		m_pEnemyposition->setVisible(true);
	
	//==>>计算目标和枪口的角度
		float angle = ccpToAngle(targetPos - gunPos);
		float degree = CC_RADIANS_TO_DEGREES(angle);
	//==>>根据角度所在的象限计算指示针的位置和旋转角度。其中,指示针也是m_pVisibleArea的child。
		int x = 0, y = 0;
		if ((degree > 45 && degree < 135)||(degree < -45 && degree > -135))
		{
			y = visibleSize.height/2;
			y = y * (degree > 0 ? 1: -1);
			x = y /tanf(angle);
		}else
		{
			x = visibleSize.width/2;
			x = x * (abs(degree) < 45 ? 1: -1);
			y = tanf(angle) * x;
		}
		
		m_pEnemyposition->setPosition(ccp(x,y) + gunPos);
		m_pEnemyposition->setRotation(-degree);
	}
	else
	{
		m_pEnemyposition->setVisible(false);
	}
}

 

发表评论

3 × 2 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据