求高手优化代码!创建10个这样的实例,慢不行了。。。

bool XUnity::init(void)
{
if (!CCSprite::init())
{
return false;
}
m_pBody = CCSprite::create();
this->addChild(m_pBody);
m_pCloth = CCSprite::create();
this->addChild(m_pCloth);
m_pHair = CCSprite::create();
this->addChild(m_pHair);
CCSpriteFrameCache* pSpriteFrameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
CCAnimationCache* pAnimationCache = CCAnimationCache::sharedAnimationCache();
char plistName;
char pngName;
char spriteName;
char bodyAniName;
char clothAniName;
char hairAniName;
for (int act=ActionType_Begin; act<ActionType_End; act++)
{//动作
//body
sprintf(plistName, “player/body/%s0.plist”, c_animationNames);
sprintf(pngName, “player/body/%s0.png”, c_animationNames);
pSpriteFrameCache->addSpriteFramesWithFile(plistName,pngName);
//cloth
sprintf(plistName, “player/cloth1/%s0.plist”, c_animationNames);
sprintf(pngName, “player/cloth1/%s0.png”, c_animationNames);
pSpriteFrameCache->addSpriteFramesWithFile(plistName,pngName);
//hair
sprintf(plistName, “player/hair1/%s0.plist”, c_animationNames);
sprintf(pngName, “player/hair1/%s0.png”, c_animationNames);
pSpriteFrameCache->addSpriteFramesWithFile(plistName,pngName);
for(int dir=DirectionType_Begin; dir<DirectionType_End; dir++)
{//方向
CCArray* pBodyArray = CCArray::create();
CCArray* pClothArray = CCArray::create();
CCArray* pHairArray = CCArray::create();
for(int frame=0; frame<c_animationFrams;frame++)
{//帧
sprintf(spriteName, “player/body/%s/%s_d%d_%d.png”,c_animationNames,c_animationNames,dir+1,frame+1);
CCSpriteFrame* pframe = pSpriteFrameCache->spriteFrameByName(spriteName);
pBodyArray->addObject(pframe);
CCTexture2D* p = pframe->getTexture();
sprintf(spriteName, “player/cloth1/%s/%s_d%d_%d.png”,c_animationNames,c_animationNames,dir+1,frame+1);
pframe = pSpriteFrameCache->spriteFrameByName(spriteName);
pClothArray->addObject(pframe);
sprintf(spriteName, “player/hair1/%s/%s_d%d_%d.png”,c_animationNames,c_animationNames,dir+1,frame+1);
pframe = pSpriteFrameCache->spriteFrameByName(spriteName);
pHairArray->addObject(pframe);
}
CCAnimation* pAnimation = CCAnimation::createWithSpriteFrames(pBodyArray,0.1f);
pBodyArray->release();
sprintf(bodyAniName, “body_%s_d%d”, c_animationNames,dir);
pAnimationCache->addAnimation(pAnimation, bodyAniName);
pAnimation = CCAnimation::createWithSpriteFrames(pClothArray,0.1f);
pClothArray->release();
sprintf(clothAniName, “cloth_%s_d%d”, c_animationNames,dir);
pAnimationCache->addAnimation(pAnimation, clothAniName);
pAnimation = CCAnimation::createWithSpriteFrames(pHairArray,0.1f);
pHairArray->release();
sprintf(hairAniName, “hair_%s_d%d”, c_animationNames,dir);
pAnimationCache->addAnimation(pAnimation, hairAniName);
}
}
sprintf(bodyAniName, “body_%s_d%d”, c_animationNames,0);
CCAnimate* pBodyAnimate = CCAnimate::create(pAnimationCache->animationByName(bodyAniName));
sprintf(clothAniName, “cloth_%s_d%d”, c_animationNames,0);
CCAnimate* pClothAnimate = CCAnimate::create(pAnimationCache->animationByName(clothAniName));
sprintf(hairAniName, “hair_%s_d%d”, c_animationNames,0);
CCAnimate* pHairAnimate = CCAnimate::create(pAnimationCache->animationByName(hairAniName));
//为什么这样播放不了??
//this->runAction(CCRepeatForever::create(CCSpawn::create(pBodyAnimate,pClothAnimate,pHairAnimate,NULL)));
m_pBody->runAction(CCRepeatForever::create(pBodyAnimate));
m_pBody->setColor(ccc3(128,128,0));
m_pCloth->runAction(CCRepeatForever::create(pClothAnimate));
m_pCloth->setColor(ccRED);
m_pHair->runAction(CCRepeatForever::create(pHairAnimate));
return true;
}

10个人物,没人有14个动作X5个方向,分body,cloth,hair,
1453种动作 这量太大了。。。,求优化方案

#define MAX_LEN 256
#define MAX_MANE_LEN 32
//方向类型
enum EDirectionType
{
DirectionType_Top = 0,
DirectionType_Top_Right = 1,
DirectionType_Right = 2,
DirectionType_Right_Down = 3,
DirectionType_Down = 4,
DirectionType_Size,
DirectionType_Begin = 0,
DirectionType_End = DirectionType_Size
};

//动作类型
enum EActionType
{
gaimaochenggong = 0,
gaimaoshibai = 1,
gaosuwuqiupao = 2,
gaosuyunqiu = 3,
koulan = 4,
qianglanbanchenggong = 5,
qianglanbanshibai = 6,
shuangshoukoulan = 7,
toulan = 8,
wuqiuzhanli = 9,
yuandichuanqiu = 10,
yuandifangshou = 11,
yuandijieqiu = 12,
yuandiyunqiu = 13,
ActionType_Size = 14,
ActionType_Begin = 0,
ActionType_End = ActionType_Size
};

//动作名称
static const char* c_animationNames = {“gaimaochenggong”,“gaimaoshibai”,“gaosuwuqiupao”,“gaosuyunqiu”,“koulan”,“qianglanbanchenggong”,
“qianglanbanshibai”,“shuangshoukoulan”,“toulan”,“wuqiuzhanli”,“yuandichuanqiu”,“yuandifangshou”,“yuandijieqiu”,“yuandiyunqiu”};

//动作帧数
static const int c_animationFrams = {6,7,8,8,10,8,6,13,8,6,6,4,4,6};

CCAnimation 的实现是不是 每一帧 都会创建CCSprite再删除再创建

CCAnimation 的实现是不是 每一帧 都会创建CCSprite再删除再创建