예제 #1
0
//----------------------------------------------------------------------------------------
//			others function means other players'
//----------------------------------------------------------------------------------------
void BaseLevelBuilder::addMonster(MonsterInitInfo info)
{
	std::map<uint32_t, SpriteMonster*>::iterator itor = m_level->m_MonsterInfo.find(info.uid);
	if (itor == m_level->m_MonsterInfo.end())
	{
		//add monster
		ASSERT(m_level->m_levelDataReference->mapFilePointer != NULL, "map file is empty");
		SpriteMonster* monster = LevelObjectCreator::sCreateSpriteMonster(info);

		monster->SetID(info.uid);
		monster->setTag(MAP_TAG_MONSTER);
		monster->setPosition(info.pos);

		//printf("addMonster %f, %f\n", info.pos.x, info.pos.y);

		//添加阴影
		/*ASprite* pAsprite = AspriteManager::getInstance()->getAsprite("spriteBin/shadow.bin");
		if(pAsprite != NULL)
		{
			CCPoint cp;
			CCSprite* pCSprite = pAsprite->getSpriteFromFrame(0, 0, cp);
			if(pCSprite != NULL)
			{
				pCSprite->setPosition(ccp(0, 0));
				pCSprite->setTag(SHADOW_TAG);
				monster->addChildToRoot(pCSprite);
			}
		}*/

		CATLObjectLayer* pObjLayer = dynamic_cast<CATLObjectLayer*>(m_level->m_pObjectsLayer);
		if(pObjLayer)
		{
			pObjLayer->AddRoleShadow(monster);
		}

		//为精英怪添加特效
		if(info.isElite)
		{
			EffectSprite * eliteEffect = ParticleManager::Get()->createEffectSprite(206,"");
			eliteEffect->SetAnim(kType_Play, 1, true);
			eliteEffect->setTag(ELITE_TAG);
			monster->addChildToRoot(eliteEffect);
		}

		if (m_level->m_pObjectsLayer)
		{
			m_level->m_pObjectsLayer->addChild(monster, LevelLayer::sCalcZorder(monster->getPosition()));			
		}

		m_level->m_MonsterInfo.insert(std::pair<uint32_t, SpriteMonster*>(info.uid, monster));
	}
	else
	{
		CCLog("error, the player has add before");
	}
}