예제 #1
0
파일: Range.cpp 프로젝트: trarck/CCUI
static void projectRange(const CCPoint& axis,const Range& range,float* min,float* max)
{
    float project=axis.dot(range.tl);
    
    *min=project;
    *max=project;
    
    project=axis.dot(range.tr);
    if (project<(*min)) {
        *min=project;
    }else if(project>(*max)){
        *max=project;
    }
    
    project=axis.dot(range.br);
    if (project<(*min)) {
        *min=project;
    }else if(project>(*max)){
        *max=project;
    }
    
    project=axis.dot(range.bl);
    if (project<(*min)) {
        *min=project;
    }else if(project>(*max)){
        *max=project;
    }
}
예제 #2
0
void PlayerSprite::update( float delta )
{
	b2ContactEdge* ce = m_pB2Body->GetContactList();
	list<BaseSprite*> desList;

	while (ce)
	{
		b2Body* body = ce->contact->GetFixtureA()->GetBody();
		BaseSprite* sprite = (BaseSprite*)body->GetUserData();

		if (sprite->getTag() == kEnemySprite)
		{
			desList.push_back(sprite);
		}
		ce = ce->next;
	}

	for (list<BaseSprite*>::iterator it = desList.begin(); it != desList.end(); it++)
	{
		CCPoint dir = (*it)->getPosition() - getPosition();
		dir = dir.normalize();

		float sita = CC_RADIANS_TO_DEGREES(acos(dir.dot(CCPoint(0, 1))));
		ElementColor hitColor;

		//cos值域在(0,180),修正在(180,360)的情况
		if (dir.x < 0)
		{
			sita = 360 - sita;
		}
		sita += getRotation();

		while (sita < 0) 
		{
			sita += 360;
		}
		sita = (int)sita % 360;

		if (sita >=0 && sita < 120)
		{
			hitColor = kGreen;
		}
		else if (sita >= 120 && sita < 240)
		{
			hitColor = kRed;
		}
		else
		{
			hitColor = kBlue;
		}

		EnemySprite* esp = dynamic_cast<EnemySprite*>(*it);
		if (!esp) continue;

		if (hitColor == esp->getElementColor())
		{
			HudLayer::getCurrent()->score(g_ScoreStep);
		}

		GameLayer::getCurrent()->getGameBg()->changeBgColor(esp->getElementColor());

		(*it)->destroySprite();
	}
	desList.clear();

	keyBoardHandle();
}