Animation cocos2d-x v3精灵动画问题

Animation cocos2d-x v3精灵动画问题,animation,cocos2d-x,Animation,Cocos2d X,我有一个小的cocos2d-xv3Windows项目,我想要一个动画精灵。我在一个名为Worker的对象中使用的精灵带有其他参数。要运行动画,我尝试了以下操作,但始终会出现分段错误: //worker.cpp: ... void Worker::initAnimationWalk() { spritebatch = cocos2d::SpriteBatchNode::create("robo.png"); auto cache = cocos2d::S

我有一个小的cocos2d-xv3Windows项目,我想要一个动画精灵。我在一个名为Worker的对象中使用的精灵带有其他参数。要运行动画,我尝试了以下操作,但始终会出现分段错误:

//worker.cpp:

...

    void Worker::initAnimationWalk() {
        spritebatch = cocos2d::SpriteBatchNode::create("robo.png");
        auto cache = cocos2d::SpriteFrameCache::getInstance();
        cache->addSpriteFramesWithFile("robo.plist");
        worker = cocos2d::Sprite::createWithSpriteFrameName("robot1.png");
        //spritebatch->addChild(worker);

        Vector<SpriteFrame *> animFrames(3);

        char str[100] = {0};

        for(int i = 1; i <= 3; i++) 
        {
            sprintf(str, "robot%i.png", i);
            cocos2d::SpriteFrame* frame = cache->getSpriteFrameByName( str );
            animFrames.pushBack(frame);
        }

        animation = cocos2d::Animation::createWithSpriteFrames(animFrames, 0.2f);
    }

cocos2d::Animation *Worker::getAnimationWalk() {
    return animation;
}

...

//Worker.h

    #ifndef __WORKER_H__
    #define __WORKER_H__

    #include "cocos2d.h"
    class Worker
    {
    public:
        ...
        void initAnimationWalk();
        cocos2d::Animation *getAnimationWalk();
    private:
        cocos2d::Animation *animation;
        cocos2d::Sprite *worker;
        cocos2d::SpriteBatchNode *spritebatch;
    };

    #endif

//Now i want the animation in my scene: 
//HellowWorldScene.cpp

    void HelloWorld::setMyAction() { //all Worker Objects in an vector
        vector<Worker>::iterator it = workerVector.begin();
        for(int i = 0; i<workerVector.size();i++) {
        it->getWorker()->stopAllActions();
                                auto actionAnim = Animate::create(it->getAnimationWalk());
                                if(it->getWorker()->getPosition().x > 0.50*2*p.x) {
                                    auto action = cocos2d::MoveTo::create(it->getSpeed(),Point(0,it->getWorker()->getPosition().y));
                                    auto sp = Spawn::createWithTwoActions(action, actionAnim);
                                    it->getWorker()->runAction(sp);
                                    it->getWorker()->setFlipX(true);
                                } else {
                                    auto action = cocos2d::MoveTo::create(it->getSpeed(),Point(2*p.x,it->getWorker()->getPosition().y));
                                    auto sp = Spawn::createWithTwoActions(action, actionAnim);
                                    it->getWorker()->runAction(sp);
                                    it->getWorker()->setFlipX(false);
                                }
    }
    it++
    }
//worker.cpp:
...
void Worker::initAnimationWalk(){
spritebatch=cocos2d::SpriteBatchNode::create(“robo.png”);
auto cache=cocos2d::SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile(“robo.plist”);
worker=cocos2d::Sprite::CreateWithPriteFrameName(“robot1.png”);
//spritebatch->addChild(工人);
矢量帧(3);
char str[100]={0};
for(int i=1;i获取spriteframebyname(str);
动画帧。回推(帧);
}
animation=cocos2d::animation::CreateWithPriteFrames(animFrames,0.2f);
}
cocos2d::Animation*Worker::getAnimationWalk(){
返回动画;
}
...
//工人
#ifndef uu工人u H__
#定义工人__
#包括“cocos2d.h”
班主任
{
公众:
...
void initAnimationWalk();
cocos2d::Animation*getAnimationWalk();
私人:
cocos2d::动画*动画;
cocos2d::精灵*工人;
cocos2d::SpriteBatchNode*spritebatch;
};
#恩迪夫
//现在我希望动画出现在我的场景中:
//HellowWorldScene.cpp
void HelloWorld::setMyAction(){//向量中的所有辅助对象
向量::迭代器it=workerVector.begin();
对于(inti=0;igetWorker()->stopAllActions();
auto-actionAnim=动画::创建(it->getAnimationWalk());
如果(it->getWorker()->getPosition().x>0.50*2*p.x){
自动操作=cocos2d::MoveTo::create(it->getSpeed(),点(0,it->getWorker()->getPosition().y));
auto sp=Spawn::createWithTwoActions(action,actionAnim);
it->getWorker()->runAction(sp);
it->getWorker()->setFlipX(true);
}否则{
自动操作=cocos2d::MoveTo::create(it->getSpeed(),Point(2*p.x,it->getWorker()->getPosition().y));
auto sp=Spawn::createWithTwoActions(action,actionAnim);
it->getWorker()->runAction(sp);
it->getWorker()->setFlipX(false);
}
}
它++
}

有什么帮助吗?

使用动画自动更改图像

Animation *animation2=Animation::create();
    animation2->setDelayPerUnit(0.7f);//Time Duration change Images 
    animation2->addSpriteFrameWithFile("img_1.png");
    animation2->addSpriteFrameWithFile("img_2.png");
    animation2->addSpriteFrameWithFile("img_3.png");

    AnimationCache::getInstance()->addAnimation(animation2, "animation2");
SpriteName->runAction(序列::创建(动画::创建(动画2),NULL));//此动画仅一次

          OR
    SpriteName->runAction(RepeatForever::create(Sequence::create(Animate::create(animation2),NULL)));//If Repeate this animation write it..

你应该使用调试器。我发现了问题,但无法解决它。当我的更新()时函数启动时,我的工作对象中的动画不再相同,它具有随机值。是否可以将动画保存在我的工作对象中,并在我的主场景类中使用它们?对于我的精灵,它工作正常,我可以在我的主场景类中使用它们,但动画消失。您提供的信息不足。问题很有可能,您可以为您的用例创建一个示例。这只是一个猜测,但您可能忘记在
getAnimationWalk()之前调用
initAnimationWalk()
,这样你就可以得到未初始化的指针。或者,也许你没有提供这段代码。你可以用C++风格来编码,而不是在COSCO2D OBC-C风格中,把所有的<代码> iTimeMistalWalk()/<代码>东西移到<代码> Works< /Cuth>构造函数,因此它将自动地被命名为<代码>矢量< /代码>创建。
SpriteAnimation auto change images using Animation.

Animation *anim=Animation::create();
    anim->setDelayPerUnit(0.7f);//Time Duration change Images 
    anim->addSpriteFrameWithFile("img_01.png");
    anim->addSpriteFrameWithFile("img_02.png");
    anim->addSpriteFrameWithFile("img_03.png");

    AnimationCache::getInstance()->addAnimation(anim, "anim");

SpriteNM->runAction(Sequence::create(Animate::create(anim),NULL));//this animation Only One time

          OR
    SpriteNM->runAction(RepeatForever::create(Sequence::create(Animate::create(anim),NULL)));//If Repeate this animation write it..