Animacja duszka jest dość prosta. Wystarczy utworzyć CCAnimationwęzeł, dodać obrazy do pętli, a następnie utworzyć akcję za pomocą CCAnimate::actionWithDuration(float, CCAnimation, bool)i uruchomić duszka.
Przykład:
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);
Dzięki, ale czym jest HelloWorld :: getPlayer ()? Występuje awaria na symulatorze iPhone'a po dodaniu runAction (laanim); do mojego kodu.
2600
Możesz użyć duszka lub dowolnego innego węzła, mam metodę, która zwraca duszka statycznego o nazwie _player, który wcześniej zainicjowałem.
MLProgrammer-CiM
Zredagowałem to teraz dla jasności :) Nie ma za co.
MLProgrammer-CiM
CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true); nie działa z bieżącą wersją cocos2d-x. Co trzeba zmienić?
Ben
Prawdopodobnie ostatnio zmienili wiele rzeczy. Nie wiem co teraz, po prostu sprawdź ich dokumentację, a może potrzebujesz jednego parametru więcej / mniej.
MLProgrammer-CiM,
5
W nowej wersji CoCos2dx (2.1.1) możesz używać (działa)
W kolejce przeglądu edycji znajduje się edycja tego pytania, której nazwa spriteWithSpriteFramejest zmieniona createWithSpriteFrame. Nie wiem wystarczająco dużo Cocos2D, aby stwierdzić, czy to poprawa. Czy edycja poprawiłaby tę odpowiedź?
Anko,
2
Jeśli nie chcesz używać pliku .plist i chcesz kontynuować odpowiedź Ef Es z bieżącą wersją cocos2d-x, po prostu zmień niektóre wiersze, jak poniżej:
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
Myślę, że może to być również rozwiązanie pytania Bena .
W przypadku cocos2dx-v3 potrzebujesz czegoś takiego:
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));
Nie udało się uzyskać innej drogi. Możesz również dodawać te same klatki w kółko, aby wprowadzić pauzę, ale jestem pewien, że jest też inny sposób.
Czy możesz mi powiedzieć, w jaki sposób uruchomiłbyś tę samą animację, ale z duszkami obracanymi poziomo? Zmagam się z tym od dłuższego czasu i wydaje się, że setFlippedX (prawda) tego nie robi ...
Odpowiedzi:
Animacja duszka jest dość prosta. Wystarczy utworzyć
CCAnimation
węzeł, dodać obrazy do pętli, a następnie utworzyć akcję za pomocąCCAnimate::actionWithDuration(float, CCAnimation, bool)
i uruchomić duszka.Przykład:
źródło
CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true);
nie działa z bieżącą wersją cocos2d-x. Co trzeba zmienić?W nowej wersji CoCos2dx (2.1.1) możesz używać (działa)
źródło
spriteWithSpriteFrame
jest zmienionacreateWithSpriteFrame
. Nie wiem wystarczająco dużo Cocos2D, aby stwierdzić, czy to poprawa. Czy edycja poprawiłaby tę odpowiedź?Jeśli nie chcesz używać pliku .plist i chcesz kontynuować odpowiedź Ef Es z bieżącą wersją cocos2d-x, po prostu zmień niektóre wiersze, jak poniżej:
Myślę, że może to być również rozwiązanie pytania Bena .
źródło
W przypadku cocos2dx-v3 potrzebujesz czegoś takiego:
Nie udało się uzyskać innej drogi. Możesz również dodawać te same klatki w kółko, aby wprowadzić pauzę, ale jestem pewien, że jest też inny sposób.
źródło