cocos2d-xv3窗口中的一些基础知识

cocos2d-xv3窗口中的一些基础知识,cocos2d-x,Cocos2d X,关于cocos2d-xv3中的一些问题,我有一些基本问题 1.)当我创建这样的精灵时: cocos2d::Sprite *sprite1 = cocos2d::Sprite::create("test.png"); auto sprite2 = cocos2d::Sprite::create("test.png"); void HelloWorld::runAnimationWalk() { auto spritebatch = cocos2d::SpriteBatchNode::cr

关于cocos2d-xv3中的一些问题,我有一些基本问题

1.)当我创建这样的精灵时:

cocos2d::Sprite *sprite1 = cocos2d::Sprite::create("test.png");
auto sprite2 = cocos2d::Sprite::create("test.png");
void HelloWorld::runAnimationWalk() {
    auto spritebatch = cocos2d::SpriteBatchNode::create("robo.png");
    auto cache = cocos2d::SpriteFrameCache::getInstance();
    cache->addSpriteFramesWithFile("robo.plist");
    //spritebatch->addChild(worker);
    Vector<SpriteFrame *> animFrames(5);
    char str[100] = {0};

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

    auto animWalk = cocos2d::Animation::createWithSpriteFrames(animFrames, 0.1f);   

    vector<Worker>::iterator it = workerVector.begin();
    for(int k = 0; k<workerVector.size();k++) {
        if(it->getType() == 1) 
            it->getWorker()->runAction(RepeatForever::create(Animate::create(animWalk)));
        it++;
    }
}
我怎么才能使它们恢复原状?我应该使用autorelease吗(当我在创建它之后使用它时,它会崩溃)?对于这两种变体,我是否可以只使用:

sprite1->removeFromParentAndCleanup(true);
sprite2->removeFromParentAndCleanup(true); 
2.)当我想要一个动画在HelloWorld场景中处于活动状态,以便我可以在需要时使用它时,我该如何做?我试过这样的方法:

cocos2d::Sprite *sprite1 = cocos2d::Sprite::create("test.png");
auto sprite2 = cocos2d::Sprite::create("test.png");
void HelloWorld::runAnimationWalk() {
    auto spritebatch = cocos2d::SpriteBatchNode::create("robo.png");
    auto cache = cocos2d::SpriteFrameCache::getInstance();
    cache->addSpriteFramesWithFile("robo.plist");
    //spritebatch->addChild(worker);
    Vector<SpriteFrame *> animFrames(5);
    char str[100] = {0};

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

    auto animWalk = cocos2d::Animation::createWithSpriteFrames(animFrames, 0.1f);   

    vector<Worker>::iterator it = workerVector.begin();
    for(int k = 0; k<workerVector.size();k++) {
        if(it->getType() == 1) 
            it->getWorker()->runAction(RepeatForever::create(Animate::create(animWalk)));
        it++;
    }
}
void HelloWorld::runAnimationWalk(){
auto-spritebatch=cocos2d::SpriteBatchNode::create(“robo.png”);
auto cache=cocos2d::SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile(“robo.plist”);
//spritebatch->addChild(工人);
矢量帧(5);
char str[100]={0};
for(int i=1;i获取spriteframebyname(str);
动画帧。回推(帧);
}
auto animWalk=cocos2d::Animation::CreateWithPriteFrames(animFrames,0.1f);
向量::迭代器it=workerVector.begin();
对于(int k=0;kgetType()==1)
它->getWorker()->runAction(RepeatForever::create(Animate::create(animWalk));
it++;
}
}
这是可行的,但我必须在我想要更改动画后始终调用该函数。我试图保存spritebatch、缓存等…全局,但动画在几分钟后就会消失。

答案1)是。这是一个完整的场景:

//Create
Sprite *sprite1 = cocos2d::Sprite::create("test.png");
this->addChild(sprite1);

// Deleter Later
sprite1->removeFromParent();
答案2)您可以创建动画(
动画*
)并在任何精灵上运行它。 请注意:

  • 如果您想反复播放动画,可以使用
    RepeatForever::create(YourAnimation)
    制作无限版本的动画
  • 如果要创建动画,但稍后使用(显示)。您可以创建
    动画*
    保留()
    直到在某个目标(精灵)上运行它。(在目标机上运行时,不要忘记ro
    释放它)