Cocos2D-x游戏开发之十七:角色类的小结

Cocos2D-x游戏开发之十七:角色类的总结

学了这么久了现在还是有点模糊,今天我们把我只之前学习的知识开始做一个简单到 总结:

首先我们先认识一下我们的游戏主角:在开发中我们往往不是把主角设置为一个精灵,因为精灵还有其他属性,所以我们的主角由一个成员变量叫做CCsprite:

同事通常因为给个主角都是有共同点的,所以我们就先抽象出来一个角色实体:

class Entity :	public CCNode,public ControlListener
{
public:
	Entity(void);
	~Entity(void);
    CCSprite *m_sprite;
private:
	
	CController *m_control;
public:
	bool BindSprite(CCSprite *sprite);
	virtual  bool SetPlayerPosition(int x,int y) ;
	virtual  CCPoint GetPlayerPosition() ;
	void SetControl(CController *control);
};
这里的
CController是一个我们自己定义的类用来实现角色的动作,稍后会为大家介绍。

Entity::Entity(void)
{
}


Entity::~Entity(void)
{
}
bool Entity::BindSprite(CCSprite *sprite)
{
	m_sprite = sprite;
	this->addChild(m_sprite);
	return true;
}
void Entity::SetControl(CController *control)
{
	m_control = control;
	m_control->SetControlListension(this);
}
bool Entity::SetPlayerPosition(int x,int y)
{
	this->setPosition(ccp(x,y));
	return true;
}
cocos2d::CCPoint Entity::GetPlayerPosition()
{
	return this->getPosition();
}

有了积累之后我们就可以定义自己的有人角色了:

class Player :	public Entity
{
public:
	Player(void);
	~Player(void);
public:
	CREATE_FUNC(Player);
	virtual bool init();
	void run();
};

角色的实现:

Player::Player(void)
{
}


Player::~Player(void)
{
}
bool Player::init()
{
	
	return true;
}
void Player::run()
{
CCSpriteFrameCache * freamCache = CCSpriteFrameCache::sharedSpriteFrameCache();
freamCache->addSpriteFramesWithFile("run.plist","run.png");
CCSpriteFrame *frame  = NULL;
CCArray *freamlist =CCArray::create();
for (int i =1; i <= 15 ; i++)
{

	frame = freamCache->spriteFrameByName(CCString::createWithFormat("run%d.png",i)->getCString());
	freamlist->addObject(frame);
}
CCAnimation *anination = CCAnimation::createWithSpriteFrames(freamlist);
anination->setLoops(-1);
anination->setDelayPerUnit(0.08f);
CCAnimate *animate = CCAnimate::create(anination);
m_sprite->runAction(animate);
}
这样我们就成功创建了我们的游戏角色。

接下来只需要在场景的init()函数中添加我们的角色。并运行run函数就会有效果出现。

最后我们说一下

class CController :	public CCNode
{
public:
	CController(void);
	~CController(void);
	void SetControlListension(ControlListener * listener);

protected:
	ControlListener *m_listener;
};

CController::CController(void)
{
}


CController::~CController(void)
{
}
void CController::SetControlListension(ControlListener * listener)
{
	m_listener = listener;
}

他是给角色添加了一个监听器来使精灵自己动起来,其中设计另外一个类:

class ControlListener
{
public:
	virtual  bool SetPlayerPosition(int x,int y)=0;
	virtual  cocos2d::CCPoint GetPlayerPosition()=0;
};

这就是我们角色的所有代码了:

Cocos2D-x游戏开发之十七:角色类的小结