2013-05-01 69 views
0

Iam新增了cocos2d-x,並在android中的.plist文件中運行sprite動畫時出現問題。下面是一個使用動畫我的精靈在ccTouchesBegan使用.plist的cocos2d-x sprite動畫

我有我的plist文件中的資源文件夾

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

並獲得以下日誌代碼IAM:

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 [email protected] 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 
上線144

:我有這

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

請幫助!

的問候,穆罕默德 阿什拉夫塔希爾

回答

2

看來,我加入了幀至陣列,而不是名稱使用CCAnimation的createWithSpriteFrames方法可以解決問題。

Ex。

CCAnimation::createWithSpriteFrames(frames,.15) 

可能對某人有用!

1

享受我爲Cocos2d-x編寫的C++類,它可以通過plist創建CCAnimate對象。

創建CCAnimate與下面的輔助類很簡單:

如果有一個名爲幀序列NODE0節點1 ....節點4,您可以創建CCAnimate對象使用上面的代碼如下:

CCAnimateManager::animateWithFrame("node", 5, 0.17,"node"); 
CCAnimate * anima = CCAnimateManager::getAnimate("node"); 

這是頭文件。

#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"); 
}; 

,這裏是cpp文件:

#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()); 
} 
0
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