cocos2d-x实战项目【飞机大战】-- 怪物根据不同关卡按波出现

在EnemyMgr的初始化时:

bool CEnemyMgr::init()
{
	if (!Node::init())
	{
		return false;
	}

	//拿到关卡数据
	int nLevelId = CDynamicData::getInstance()->getLevelId();
	pLevelDt = CConfigMgr::getInstance()->getData("LevelDtMgr")->getDataByID<CLevelDt*>(nLevelId);
	//通过关卡拿到怪物波的数据(定义一个索引)
	m_pCurWave = pLevelDt->vecWaves[m_nWaveIndex];

	//定时器:怪物定时出现(怪物波数据中的间隔)
	this->schedule(CC_CALLBACK_1(CEnemyMgr::addEnemy, this), m_pCurWave->fInterval, "addEnemy");    //调用addEnemy函数,增加怪物数量

	return true;
}

在addEnemy中:

void CEnemyMgr::addEnemy(float fDt)
{
	//怪物数量 >= 当前波定义的那个怪物数
	if (m_nCount >= m_pCurWave->nCount )   //最后一只怪物(当前这波满了)
	{
		//最后一波怪物
		if (m_nWaveIndex >= pLevelDt->vecWaves.size()-1)
		{
			return;  //跳出函数执行
		}

		//切换到下一波怪
		m_nCount = 0;  //怪物数量置零
		m_nWaveIndex++;   //波索引++
		m_pCurWave = pLevelDt->vecWaves[m_nWaveIndex]; //把新怪物波赋给当前怪物波
		

		//关闭添加怪物的定时器
		this->unschedule("addEnemy");

		//开启切换到下一个怪物波的定时器(用匿名函数)
		this->scheduleOnce([this](float fDt) -> void{

			this->schedule(CC_CALLBACK_1(CEnemyMgr::addEnemy, this),m_pCurWave->fInterval,"addEnemy");  //开启添加怪物计时器

		}, m_pCurWave->fNextInterval, "openNextWave");

		return;  //怪物已经是最后一只,不再执行后面的代码
	}

	m_nCount++;  //怪物数量增加

	//根据数据创建怪物
	CEnemyDt* pConfig = CConfigMgr::getInstance()->getData("EnemyDtMgr")->getDataByID<CEnemyDt*>(m_pCurWave->nEnemyId);
	CEnemy* pEnemy = CEnemy::createWithData(pConfig);
	//设置怪物的初始位置
	float fx = rand()%280 + 20;
	float fy = visibleSize.height + 100;
	pEnemy->setPosition(fx, fy);
	this->addChild(pEnemy);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值