Reputation: 242
Iam new to cocos2d-x and having problem running sprite animation from .plist file in android. below is the code iam using to animate my sprite in ccTouchesBegan
I have my plist file in resources folder
void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
mole->stopAllActions();
CCArray *frames = CCArray::create();
for(int i = 1; i <= 11; i++)
{
CCString *frame = CCString::createWithFormat("b%04d.png", i);
frames->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(frame->getCString()));
}
mole->runAction(CCAnimate::create(CCAnimation::create(frames,.15)));
}
and getting the following log:
05-01 16:02:33.328: D/dalvikvm(3506): Added shared lib /data/data/com.cocos.moleit/lib/libgame.so 0x405167e0
05-01 16:02:33.328: I/ApplicationPackageManager(3506): cscCountry is not German : PAK
05-01 16:02:33.359: I/GLThread(3506): noticed surfaceView surface lost tid=10
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 1
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 2
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 3
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 4
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 5
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 6
05-01 16:02:33.367: D/SensorManager(3506): ====>>>>>Num Sensor: 0
05-01 16:02:33.375: I/GLThread(3506): onResume tid=10
05-01 16:02:33.375: D/cocos2d-x debug info(3506): cocos2d: cocos2d-2.1rc0-x-2.1.2
05-01 16:02:33.453: I/GLThread(3506): noticed surfaceView surface acquired tid=10
05-01 16:02:33.453: W/EglHelper(3506): start() tid=10
05-01 16:02:33.523: D/libEGL(3506): loaded /system/lib/egl/libGLES_hgl.so
05-01 16:02:33.531: D/BRCM_EGL(3506): eglCreateContext() context: 0x1ba388, VC context 1, Thread 3515
05-01 16:02:33.531: W/EglHelper(3506): createContext com.google.android.gles_jni.EGLContextImpl@4052b938 tid=10
05-01 16:02:33.531: I/GLThread(3506): noticing that we want render notification tid=10
05-01 16:02:33.531: W/GLThread(3506): egl createSurface
05-01 16:02:33.531: W/EglHelper(3506): createSurface() tid=10
05-01 16:02:33.531: D/BRCM_EGL(3506): eglCreateWindowSurface() surface: 0x1ba3f8, VC surface: 1, Thread: 3515
05-01 16:02:33.531: D/BRCM_EGL(3506): eglMakeCurrent(0x1ba388, 0x1ba3f8, 0x1ba3f8) Thread: 3515
05-01 16:02:33.531: W/GLThreadManager(3506): checkGLESVersion mGLESVersion = 131072 mMultipleGLESContextsAllowed = true
05-01 16:02:33.531: W/GLThread(3506): onSurfaceCreated
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL_VENDOR: Broadcom
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL_RENDERER: VideoCore IV HW
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL_VERSION: OpenGL ES 2.0
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL_MAX_TEXTURE_SIZE: 2048
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL_MAX_TEXTURE_UNITS: 8
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL supports PVRTC: NO
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL supports BGRA8888 textures: NO
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL supports NPOT textures: YES
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL supports discard_framebuffer: YES
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: GL supports shareable VAO: NO
05-01 16:02:33.601: D/cocos2d-x debug info(3506): cocos2d: compiled with Profiling Support: NO
05-01 16:02:34.484: W/GLThread(3506): onSurfaceChanged(320, 240)
05-01 16:02:34.687: I/GLThread(3506): sending render notification tid=10
05-01 16:02:50.335: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.335: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.335: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
05-01 16:02:50.343: E/cocos2d-x assert(3506): C:/tahir/cocos2dx_zip/cocos2d-2.1rc0-x-2.1.2/cocos2d-2.1rc0-x-2.1.2/moleitx/proj.android/../../cocos2dx/sprite_nodes/CCAnimation.cpp function:initWithAnimationFrames line:144
on line 144: i have this
bool CCAnimation::initWithAnimationFrames(CCArray* arrayOfAnimationFrames, float delayPerUnit, unsigned int loops){
CCARRAY_VERIFY_TYPE(arrayOfAnimationFrames, CCAnimationFrame*); // line 144 error:
m_fDelayPerUnit = delayPerUnit;
m_uLoops = loops;
setFrames(CCArray::createWithArray(arrayOfAnimationFrames));
CCObject* pObj = NULL;
CCARRAY_FOREACH(m_pFrames, pObj)
{
CCAnimationFrame* animFrame = (CCAnimationFrame*)pObj;
m_fTotalDelayUnits += animFrame->getDelayUnits();
}
return true;
}
please help!
Regards, Muhammad Tahir Ashraf
Upvotes: 0
Views: 2962
Reputation: 87
RepeatForever* HelloWorld::moving()
{
// 3. repeat the frame
int numFrame = 8;
cocos2d::Vector<cocos2d::SpriteFrame *> frames;
SpriteFrameCache *frameCache = SpriteFrameCache::getInstance();
char file[100] = {0};
for (int i = 0; i < numFrame; i++)
{
sprintf(file, "bear%d.png", i+1);
SpriteFrame *frame = frameCache->getSpriteFrameByName(file);
frames.pushBack(frame);
}
Animation *animation = Animation::createWithSpriteFrames(frames, 0.07);
Animate *animate = Animate::create(animation);
RepeatForever *repeat = RepeatForever::create(animate);
return repeat;
}
sprite->runAction(moving());
First add PNG file created from SpriteBulder(In many images Animation)
second add plist file
Upvotes: 0
Reputation: 242
It seems that I was adding the frames to the array and not the names use the createWithSpriteFrames method of CCAnimation resolves the issue.
Ex.
CCAnimation::createWithSpriteFrames(frames,.15)
might be useful for someone!
Upvotes: 2
Reputation: 11
Enjoy the class i have write in C++ for cocos2d-x, it can create CCAnimate object by a plist.
to create CCAnimate with the helper class below is simple:
if you have a sequence of frames named node0 node1 .... node4, you can create the CCAnimate object use the follow code above:
CCAnimateManager::animateWithFrame("node", 5, 0.17,"node");
CCAnimate * anima = CCAnimateManager::getAnimate("node");
this is the header file.
#include <iostream>
#include "cocos2d.h"
using namespace std;
using namespace cocos2d;
class CCAnimateManager:public CCAnimation
{
public:
static CCAnimate * getAnimate(string name);
static void animateWithFile(string name, int frameCount, float delay, string animateName, const char * format = "%s%04d.png");
static void animateWithFrame(string frame,int frameCount, float delay, string animateName,const char * format = "%s%04d.png");
};
and here is the cpp file:
#include "CCAnimateManager.h"
#include "cocos2d.h"
using namespace cocos2d;
CCAnimate * CCAnimateManager::getAnimate(string name)
{
return CCAnimate::create(CCAnimationCache::sharedAnimationCache()->animationByName(name.c_str()));
}
void CCAnimateManager::animateWithFrame(string frame, int frameCount, float delay, string animateName, const char * format)
{
CCAnimation* animation = CCAnimation::create();
animation->setDelayPerUnit(delay);
char str[64] = {0};
for (int i = 0; i < frameCount; i++)
{
sprintf(str, format,frame.c_str(), i);
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
CCSpriteFrame* frame = cache->spriteFrameByName(str);
animation->addSpriteFrame(frame);
}
CCAnimationCache::sharedAnimationCache()->addAnimation(animation, animateName.c_str());
}
void CCAnimateManager::animateWithFile(string name, int frameCount, float delay, string animateName, const char * format)
{
CCAnimation* animation = CCAnimation::create();
animation->setDelayPerUnit(delay);
char str[64] = {0};
for (int i = 0; i < frameCount; i++)
{
sprintf(str, format,name.c_str(), i);
CCTexture2D * texture = CCTextureCache::sharedTextureCache()->addImage(str);
CCSize size = texture->getContentSize();
CCRect rect = CCRectMake(0, 0, size.width, size.height);
CCSpriteFrame * frame = CCSpriteFrame::createWithTexture(texture, rect);
animation->addSpriteFrame(frame);
}
CCAnimationCache::sharedAnimationCache()->addAnimation(animation, animateName.c_str());
}
Upvotes: 1