温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

一个英雄类的创建

发布时间:2020-07-05 16:30:15 来源:网络 阅读:535 作者:libinqi456 栏目:开发技术

****************************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;
}



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI