Спрайт анимация довольно проста. Вы просто создаете CCAnimationузел, добавляете изображения в цикл, затем создаете действие, используя CCAnimate::actionWithDuration(float, CCAnimation, bool)и запускаете его спрайтом.
Пример:
CCAnimation* anim =CCAnimation::animation();// There are other several ways of storing + adding frames, // this is the most basic using one image per frame.
anim->addFrameWithFileName("bear1.png");
anim->addFrameWithFileName("bear2.png");
anim->addFrameWithFileName("bear3.png");
anim->addFrameWithFileName("bear4.png");
anim->addFrameWithFileName("bear5.png");
anim->addFrameWithFileName("bear6.png");
anim->addFrameWithFileName("bear7.png");
anim->addFrameWithFileName("bear8.png");CCAnimate*theAnim =CCAnimate::actionWithDuration(1.8f,anim,true);// Duration, animation action and bool to return to frame 1 after finishing.CCSprite*bear =CCSprite::spriteWithFile("bear1.png");
addChild(bear,0);//Don't forget to add any sprite you use as a child to the CCLayer!
bear->runAction(theAnim);
Спасибо, но что такое HelloWorld :: getPlayer ()? Я получаю сбой на симуляторе iPhone при добавлении runAction (laanim); в мой код.
26:00
Вы можете использовать спрайт или любой другой узел, который вам нужен, у меня есть метод, который возвращает статический спрайт с именем _player, который я ранее инициализировал.
MLProgrammer-CiM
Я отредактировал это для ясности теперь :) Добро пожаловать.
MLProgrammer-CiM
CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true); не работает с текущей версией cocos2d-x. Что должно быть изменено?
Бен
Возможно, в последнее время они много чего переделали. Не знаю, что сейчас, просто проверьте их документацию и, возможно, вам нужен один параметр больше / меньше.
MLProgrammer-CiM
5
В новой версии CoCos2dx (2.1.1) вы можете использовать (это работает)
Существует изменение этого вопроса в очереди на редактирование, которая переименовывается spriteWithSpriteFrameв createWithSpriteFrame. Я не знаю достаточно Cocos2D, чтобы сказать, если это улучшение. Редактирование улучшило бы этот ответ?
Анко
2
Если вы не хотите использовать файл .plist и хотите продолжить с ответом Ef Es на текущую версию cocos2d-x, просто измените несколько строк, как показано ниже:
CCSprite* sprite =CCSprite::create("bear1.png");// NEW - create a sprite hereCCAnimation* anim =CCAnimation::animation();// There are other several ways of storing + adding frames, // this is the most basic using one image per frame.
anim->addSpriteFrameWithFileName("bear1.png");
anim->addSpriteFrameWithFileName("bear2.png");
anim->addSpriteFrameWithFileName("bear3.png");
anim->addSpriteFrameWithFileName("bear4.png");
anim->addSpriteFrameWithFileName("bear5.png");
anim->addSpriteFrameWithFileName("bear6.png");
anim->addSpriteFrameWithFileName("bear7.png");
anim->addSpriteFrameWithFileName("bear8.png");
anim->setLoops(-1);// for infinit loop animation
anim->setDelayPerUnit(0.1f);//Duration per frame//CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true); // this wont work in newer version..
sprite->runAction(CCAnimate::create(anim));
sprite->setPosition(ccp(200,200));//set position of sprite in some visible areathis->addChild(sprite,1);// cross check the Z index = 1 with your code
Я думаю, что это может быть решением и для вопроса Бена .
Для cocos2dx-v3 вам понадобится что-то вроде этого:
auto cache =SpriteFrameCache::getInstance();Vector<SpriteFrame*> frames =Vector<SpriteFrame*>();
frames.pushBack(cache->getSpriteFrameByName("open.png"));
frames.pushBack(cache->getSpriteFrameByName("closed.png"));
frames.pushBack(cache->getSpriteFrameByName("closed.png"));
cocos2d::Animation* anim = cocos2d::Animation::createWithSpriteFrames(frames,0.1f,1);
cocos2d::Animate* anim_action = cocos2d::Animate::create(anim);//sprite is already added to scene elsewhere and ready to gothis->sprite->runAction(RepeatForever::create(anim_action));
Не смог найти другого пути. Вы также можете снова и снова добавлять одни и те же кадры, чтобы ввести паузу, но я уверен, что есть и другой способ сделать это.
Можете ли вы сказать мне, как вы будете запускать ту же анимацию, но со спрайтами, перевернутыми горизонтально? Некоторое время я боролся с этим, и setFlippedX (true), похоже, этого не делает ...
Ответы:
Спрайт анимация довольно проста. Вы просто создаете
CCAnimation
узел, добавляете изображения в цикл, затем создаете действие, используяCCAnimate::actionWithDuration(float, CCAnimation, bool)
и запускаете его спрайтом.Пример:
источник
CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true);
не работает с текущей версией cocos2d-x. Что должно быть изменено?В новой версии CoCos2dx (2.1.1) вы можете использовать (это работает)
источник
spriteWithSpriteFrame
вcreateWithSpriteFrame
. Я не знаю достаточно Cocos2D, чтобы сказать, если это улучшение. Редактирование улучшило бы этот ответ?Если вы не хотите использовать файл .plist и хотите продолжить с ответом Ef Es на текущую версию cocos2d-x, просто измените несколько строк, как показано ниже:
Я думаю, что это может быть решением и для вопроса Бена .
источник
Для cocos2dx-v3 вам понадобится что-то вроде этого:
Не смог найти другого пути. Вы также можете снова и снова добавлять одни и те же кадры, чтобы ввести паузу, но я уверен, что есть и другой способ сделать это.
источник