有时我们做瞄准类游戏时,目标可能会飞出屏幕外,这时我们可以使用一个指示针来提示用户,如下图:
代码的实现其实也很简单,只要计算好了坐标值,设置一下就可以了。如下图:
这里简要的笔记下实现代码:
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); } }
发表评论