您好,登錄后才能下訂單哦!
****************************Hero.h******************************
#ifndef __HERO_H__
#define __HERO_H__
#include "cocos2d.h"
//#include "cocos-ext.h"
using namespace cocos2d;
//USING_NS_CC_EXT;
class Hero:public cocos2d::Node
{
public:
Hero(void);
~Hero(void);
//根據圖片名創建英雄
void InitHeroSprite(char *hero_name);
//設置動畫,num為圖片數目,run_directon為精靈臉朝向,false朝右,name_each為name_png中每一小張圖片的公共名稱部分
void SetAnimation(const char *name_plist,const char *name_png,const char *name_each,const unsigned int num,bool run_directon);
//停止動畫
void StopAnimation();
//判斷是否在跑動畫
bool IsRunning;
//英雄運動的方向
bool HeroDirecton;
CREATE_FUNC(Hero);
private:
Sprite* m_HeroSprite;//精靈
char *Hero_name;//用來保存初始狀態的精靈圖片名稱
};
#endif // __HERO_H__
*************************************Hero.cpp************************
#include "Hero.h"
USING_NS_CC;
//USING_NS_CC_EXT;
Hero::Hero(void)
{
IsRunning=false;//沒在放動畫
HeroDirecton=false;//向右運動
Hero_name=NULL;
}
Hero::~Hero(void)
{
}
void Hero::InitHeroSprite(char *hero_name)
{
Hero_name=hero_name;
this->m_HeroSprite=Sprite::create(hero_name);
this->addChild(m_HeroSprite);
}
//動畫播放,可以是跑、***、死亡、受傷等
void Hero::SetAnimation(const char *name_plist,const char *name_png,const char *name_each,unsigned int num,bool run_directon)
{
if(HeroDirecton!=run_directon)
{ HeroDirecton=run_directon;
m_HeroSprite->setFlipX(run_directon);
}
if(IsRunning)
return;
//將圖片加載到精靈幀緩存池
SpriteFrameCache *m_frameCache=SpriteFrameCache::sharedSpriteFrameCache();
m_frameCache->addSpriteFramesWithFile(name_plist,name_png);
//用一個列表保存所有的CCSpriteFrameCache
//CCArray* frameArray= CCArray::createWithCapacity(num);
Vector<SpriteFrame*> frameArray;
unsigned int i;
for(i=1;i<=num;i++)
{
SpriteFrame* frame=m_frameCache->spriteFrameByName(String::createWithFormat("%s%d.png",name_each,i)->getCString());
frameArray.pushBack(frame);
}
//使用列表創建動畫對象
Animation* animation=Animation::createWithSpriteFrames(frameArray);
if(HeroDirecton!=run_directon)
{ HeroDirecton=run_directon;
}
animation->setLoops(-1);//表示無限循環播放
animation->setDelayPerUnit(0.1f);//每兩張圖片的時間隔,圖片數目越少,間隔最小就越小
//將動畫包裝成一個動作
Animate* act=Animate::create(animation);
m_HeroSprite->runAction(act);
IsRunning=true;
}
void Hero::StopAnimation()
{
if(!IsRunning)
return;
m_HeroSprite->stopAllActions();//當前精靈停止所有動畫
//恢復精靈原來的初始化貼圖
this->removeChild(m_HeroSprite,TRUE);//把原來的精靈刪除掉
m_HeroSprite=Sprite::create(Hero_name);//恢復精靈原來的貼圖樣子
m_HeroSprite->setFlipX(HeroDirecton);
this->addChild(m_HeroSprite);
IsRunning=false;
IsRunning=false;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。