【cocos2d-x 手游研发小技巧(17)封装动画插件,序列帧 plist+png】

【cocos2d-x 手游研发小技巧(17)封装动画插件,序列帧 plist+png】,第1张

概述今天是2014年的最后一天  明天就是2015年了 今天给大家一点干活    我就直接上代码了 #ifndef __ENTITY_ACTION_H__ #define __ENTITY_ACTION_H__ #include "cocos2d.h" #include "cocos-ext.h" #include "game/entity/UISprite.h" class EntityAction

今天是2014年的最后一天 明天就是2015年了 今天给大家一点干活

我就直接上代码了


#ifndef __ENTITY_ACTION_H__
#define __ENTITY_ACTION_H__
#include "cocos2d.h"
#include "cocos-ext.h"
#include "game/entity/UISprite.h"

class EntityAction : public CCNode
{
public:
EntityAction(voID);
~EntityAction(voID);
virtual voID update(F32 dt);//定时器
voID PListDownload(const C8* PList,const C8 *Image,const C8 *Spritename,float SequenceFrameTime = 0.2f,float SpritepositionX = 0.0f,float SpritepositionY = 0.0f);//第一个是pList 第二个 Image 第三个 int con 是数量
voID RequestOnePList(const char* url);
voID RequestOneImage(const char* url);
voID onPListCompleted(cocos2d::CCNode* sender,voID* data);
voID onImageCompleted(cocos2d::CCNode* sender,voID* data);
voID WriteZipfileGeneralPList( const char* pData,int fileSize,const C8* zipPath);
voID WriteZipfileGeneralimage( const char* pData,const C8* zipPath);
voID SequenceFrame();


private:
int nDownloadNumber;
stringc m_splistname;//pList的路劲
stringc m_sImagename;//Image的图片
stringc m_sspritename;
int m_nDownloadNum; //一个有多少
float m_fSpritepositionX;//x的位置
float m_fSpritepositionY;//y的位置
float m_fSequenceFrameTime;//时间

cocos2d::CCSpriteBatchNode *_actors;
cocos2d::CCSprite *_bear;
};
#endif

.cpp

#include "stdafx.h"
#include "EntityAction.h"
#include "network/JsonMsg/JsonMsgManager.h"
#include "cocos-ext.h"
#include "network/httpRequest.h"
#include "io/io.h"
#include "game/fileManager.h"
#include "game/ai/timeManager.h"
#include "game/gamestate/GameStatePlay.h"

USING_NS_CC_EXT;
static httpAdapter* httpAdapter;
static bool m_bPListFlag;//PList 是否下載完成
static bool m_bPngFlag;//PNG是否下載完成



EntityAction::EntityAction(voID)
{
m_bPListFlag = false;
m_bPngFlag = false;
m_fSpritepositionX = 0.0f;
m_fSpritepositionY = 0.0f;
m_fSequenceFrameTime = 0.0f;


}

EntityAction::~EntityAction(voID)
{
unscheduleUpdate();
CCDirector::sharedDirector()->resume();
this->removeFromParentAndCleanup(true);
}

voID EntityAction::update(F32 dt)//控制时间
{
//m_bPListFlag
//cclOG("%d",m_bPListFlag);
if (m_bPListFlag == true && m_bPngFlag == true)
{
m_bPListFlag = false;
m_bPngFlag = false;
SequenceFrame();
}

}


//位置 多长
voID EntityAction::SequenceFrame()
{
CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
frameCache->addSpriteFramesWithfile(m_splistname.c_str());
int index = 1;
CCArray* pAnimFrames = CCArray::create();
CCSpriteFrame *pFrame = NulL;
do
{
char str[100] = {0};
sprintf(str,"%s_%d.png",m_sspritename.c_str(),index);
pFrame = frameCache->spriteFrameByname(str);
if (pFrame == NulL)
{
break;
}
pAnimFrames->addobject(pFrame);
index++;
} while (true);

CCAnimation *pAnimation = CCAnimation::createWithSpriteFrames(pAnimFrames,m_fSequenceFrameTime);
CCAnimate *pAnim = CCAnimate::create(pAnimation);

CCSprite *pGrossini = CCSprite::create();
pGrossini->setposition(ccp(m_fSpritepositionX,m_fSpritepositionY));
this->addChild(pGrossini);
pGrossini->runAction(CCRepeatForever::create(pAnim));
}


voID EntityAction::PListDownload(const C8* PList,float SequenceFrameTime,float SpritepositionX,float SpritepositionY) //pList下载 这个是测试
{

m_splistname = PList;
m_sImagename = Image;
m_sspritename = Spritename;
m_fSpritepositionX = SpritepositionX;
m_fSpritepositionY = SpritepositionY;
m_fSequenceFrameTime = SequenceFrameTime;

//如果传过来的url为空 直接返回
if (strcmp(PList,"") == 0 && strcmp(Image,"") == 0)
{
return ;
}
//判断是否为网络图片
if (strlen(PList) > 4 && PList[0] == 'h' && PList[1] == 't' && PList[2] == 't' && PList[3] == 'p' && strlen(Image) > 4 && Image[0] == 'h' && Image[1] == 't' && Image[2] == 't' && Image[3] == 'p')
{
m_splistname = GameIns.GetJsonMsgMgr()->GetFullPicturenameByUrl(PList);
//这个是返回文件路劲 大家一般不需要 可以不要

m_sImagename = GameIns.GetJsonMsgMgr()->GetFullPicturenameByUrl(Image);
}
CCSprite *m_pSprite = cocos2d::CCSprite::spriteWithfile(m_sImagename.c_str());
if (m_pSprite == NulL)
{
RequestOnePList(PList);//下载pList
RequestOneImage(Image);//下载图片
}
else
{
m_pSprite->removeFromParentAndCleanup(true);
m_bPListFlag = true;
m_bPngFlag = true;
}



CCDirector::sharedDirector()->getScheduler()->scheduleUpdateForTarget(this,false);
}

//下載 pList
voID EntityAction::RequestOnePList(const char* url)
{
if (httpAdapter == NulL)
{
httpAdapter = SYTX_NEW httpAdapter();//SYTX_NEW new
}
CChttpRequest *request = SYTX_NEW CChttpRequest();
request->setUrl(url);
request->setRequestType(CChttpRequest::khttpGet);
request->setResponseCallback(httpAdapter,callfuncND_selector(EntityAction::onPListCompleted));
request->setTag(url);
CChttpClIEnt::getInstance()->send(request);
request->release();
}
//下載 jpg
voID EntityAction::RequestOneImage(const char* url)
{
if (httpAdapter == NulL)
{
httpAdapter = SYTX_NEW httpAdapter();
}
CChttpRequest *request = SYTX_NEW CChttpRequest();
request->setUrl(url);
request->setRequestType(CChttpRequest::khttpGet);
request->setResponseCallback(httpAdapter,callfuncND_selector(EntityAction::onImageCompleted));
request->setTag(url);
CChttpClIEnt::getInstance()->send(request);
request->release();
}

//CChttpRequest 回调方法
voID EntityAction::onPListCompleted(cocos2d::CCNode* sender,voID* data)
{
stringc pszZipfilePath = cocos2d::CCfileUtils::sharedfileUtils()->getWriteablePath() + "ui_load";//路劲
cocos2d::CCfileUtils::sharedfileUtils()->createDirectory(pszZipfilePath.c_str());
CChttpResponse *response = (CChttpResponse*)data;
if (!response)
{
return;
}
char* szUrl;
stringc strImagename;
char szText[2048] = {0};
SPRINTF(szText,"%s",response->gethttpRequest()->getTag());
szUrl = szText;
strImagename = GameIns.GetJsonMsgMgr()->GetFullPicturenameByUrl(szUrl);
if (0 != strlen(response->gethttpRequest()->getTag()))
{
DBGPRINTLN("ui: %s image download successfully",response->gethttpRequest()->getTag());
}
S32 statusCode = response->getResponseCode();
C8 statusstring[2048] = {};
SPRINTF(statusstring,"http Status Code: %d,tag = %s",statusCode,response->gethttpRequest()->getTag());
DBGPRINTLN("response code: %d",statusCode);
const std::vector<C8> *buffer = response->getResponseData();
WriteZipfileGeneralPList(&(*buffer)[0],buffer->size(),strImagename.c_str());

stringc UrlAddress =szUrl;//url 地址
if (UrlAddress.find_last_of("#") != -1)
{
stringc versionNumber=UrlAddress.substr(UrlAddress.find_last_of("#")+1);//版本号
GameIns.GetfileManager()->InsertOnePic(strImagename.c_str(),GameIns.GetTimeMgr()->GetDWLocalTime(),versionNumber.c_str());
}
else
{
GameIns.GetfileManager()->InsertOnePic(strImagename.c_str(),"0");
}
m_bPListFlag = true;
cclOG("----%d",m_bPListFlag);

}

////CChttpRequest 回调方法
voID EntityAction::onImageCompleted(cocos2d::CCNode* sender,statusCode);
const std::vector<C8> *buffer = response->getResponseData();
WriteZipfileGeneralimage (&(*buffer)[0],"0");
}
m_bPngFlag = true;
cclOG("----%d",m_bPngFlag);

}
//写pList图片
voID EntityAction::WriteZipfileGeneralPList( const char* pData,const C8* zipPath)
{
stringc pszZipfilePath;

file* file = NulL;
#if ANDROID
pszZipfilePath = zipPath;
file = fopen(pszZipfilePath.c_str(),"wb+");
#elif(CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
pszZipfilePath = zipPath;
file = fopen(pszZipfilePath.c_str(),"wb+");
#else
pszZipfilePath = cocos2d::CCfileUtils::sharedfileUtils()->getWriteablePath() + zipPath;
IO_FOPEN(file,pszZipfilePath.c_str(),"wb+");
#endif
//ADD_float_MSG(pszZipfilePath.c_str());
if (file)
{
fwrite(pData,sizeof(U8),fileSize,file);
fflush(file);
fclose(file);
}
m_bPListFlag = true;
cclOG("--WriteZipfileGeneralPList--%d",m_bPListFlag);


}

//写Image图片
voID EntityAction::WriteZipfileGeneralimage( const char* pData,file);
fflush(file);
fclose(file);
}
m_bPngFlag = true;
cclOG("--WriteZipfileGeneralimage--%d",m_bPngFlag);
}

代码下载

http://www.sundaboke.com/text/EntityAction.rar

总结

以上是内存溢出为你收集整理的【cocos2d-x 手游研发小技巧(17)封装动画插件序列帧 plist+png】全部内容,希望文章能够帮你解决【cocos2d-x 手游研发小技巧(17)封装动画插件,序列帧 plist+png】所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1027524.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存