Cocos2D-x游戏开发之十二:在游戏背景上添加障碍物

今天我们在我们的游戏场景中再添加一个很重要的角色,游戏障碍物。

这一节的游戏障碍我们任然在上一节所说的实体类上继承:

我们的障碍物类如下所示实现:

class Monster :
	public Entry
{
public:
	Monster(void);
	~Monster(void);
	CREATE_FUNC(Monster);
	virtual bool init();
public:
	void show();
	void hide();
	void reset();
	bool isAlive();
    bool IsCollideWithPlayer(Player *player);
private:
	bool m_isAtive;
};
#define INIT_X CCDirector::sharedDirector()->getVisibleSize().width + 30
#define INIT_Y CCDirector::sharedDirector()->getVisibleSize().height / 3
Monster::Monster(void)
{
	m_isAtive = false;
}


Monster::~Monster(void)
{
}
void Monster::show()
{
	if (GetSprite()!=NULL)
	{
	setVisible(true);
	m_isAtive = true;
	}
}
void Monster::hide()
{
	if (GetSprite()!=NULL)
	{
		setVisible(false);
		setPosition(ccp(810,CCRANDOM_0_1()*500-10));
		//reset();
		m_isAtive = true;
	}
}
void Monster::reset()
{
	if (GetSprite()!=NULL)
	{
		setPosition(ccp( CCRANDOM_0_1()*800+10 ,  CCRANDOM_0_1()*500-10));
		m_isAtive = true;
	}
}
bool Monster::isAlive()
{
	return m_isAtive;
}
bool  Monster::init()
{
    return true;

}
 bool Monster::IsCollideWithPlayer(Player *player)
 {
	 CCRect rect = player->GetBoundingBox();
	 CCPoint point = getPosition();
	 return rect.containsPoint(point);
 }


有了障碍物我们不能把障碍物一个一个的添加到场景中不是,所有我们还需要再实现另一个类用来管理很多的障碍物,这个障碍物管理类如下所示:

#include "Play.h"
using namespace cocos2d;
class MonsterManager :
	public CCNode
{
public:
	MonsterManager(void);
	~MonsterManager(void);
	virtual bool init();
	CREATE_FUNC(MonsterManager);
	virtual void update(float dt);
	void bindPlayer( Player* player );

private:
	void CreateMonster();
private:
	CCArray * m_monstrArr;
	Player* m_player;
};
bool MonsterManager::init()
{
	bool bRet = false;
	do 
	{
		CreateMonster();
		this->scheduleUpdate();
	    bRet =true;
	} while (0);
return true;
}
void MonsterManager::update(float dt)
{
	CCObject *obj = NULL;
	Monster *monster = NULL;
	CCARRAY_FOREACH(m_monstrArr,obj)
	{
		monster = (Monster*)obj;
		if (monster->isAlive())
		{
			monster->setPositionX(monster->getPositionX()-3);
			if (monster->getPositionX()< 0)
			{
				monster->hide();
			}
			else if (monster->IsCollideWithPlayer(m_player))
			{
				m_player->hit();
				monster->hide();
			}
			{
				monster->show();
			}
		}
	}
}
void MonsterManager::CreateMonster()
{
	m_monstrArr = CCArray::create();
	m_monstrArr->retain();
	Monster *monster = NULL;
	CCSprite *sprite = NULL;
	for (int i = 0;i<10;i++)
	{
        monster = Monster::create();
        monster->BlindSprite(CCSprite::create("monster.png"));
		monster->reset();
		this->addChild(monster,3);
		m_monstrArr->addObject(monster);

	}
}
void MonsterManager::bindPlayer( Player* player )
{
	this->m_player = player;
}


现在我么可以在障碍物管你器里面添加定时器,跟新我们的怪物坐标让怪物动起来:

void MonsterManager::update(float dt)
{
	CCObject *obj = NULL;
	Monster *monster = NULL;
	CCARRAY_FOREACH(m_monstrArr,obj)
	{
		monster = (Monster*)obj;
		if (monster->isAlive())
		{
			monster->setPositionX(monster->getPositionX()-3);
			if (monster->getPositionX()< 0)
			{
				monster->hide();
			}
			else if (monster->IsCollideWithPlayer(m_player))
			{
				m_player->hit();
				monster->hide();
			}
			{
				monster->show();
			}
		}
	}
}

我们再次说明这个函数是应为他可以让我们的障碍物动起来

最后 再将怪物管理器添加到我们的场景中现在我们的场景中有了游戏主角,有了障碍物,有了背景,是不是感觉其乐融融啊!

我们先来看看效果吧:

Cocos2D-x游戏开发之十二:在游戏背景上添加障碍物_第1张图片

你可能感兴趣的:(Cocos2D-x游戏开发之十二:在游戏背景上添加障碍物)