원글 출처 : http://horns.tistory.com/14
-10- 코인 애니메이션
1. Move State
GameCoin.h
class GameCoin : public Sprite { private: public: enum gameState{ LIVE, DEAD, SELECT, MOVE, };
2. 움직이는 액션 추가
HelloWorldScene.h
class HelloWorld : public cocos2d::Layer { private: .. public: .. void moveCoin(GameCoin* coin, Point& pos); void coinMoveDone(Node* pSender); };
HelloWorldScene.cpp
void HelloWorld::moveCoin(GameCoin* coin, Point& pos){//추가 float duration = 0.0f; float coinSpeed = 1000.0f; Point prevPos = coin->getPosition(); coin->setState(GameCoin::MOVE); coin->stopAllActions(); duration = prevPos.getDistance(pos)/coinSpeed; FiniteTimeAction* movePos = Sequence::create( MoveTo::create(duration, pos), CallFuncN::create(this, callfuncN_selector(HelloWorld::coinMoveDone)), NULL); coin->runAction(movePos); }
void HelloWorld::coinMoveDone(Node* pSender){//추가 GameCoin* coin = (GameCoin*)pSender; coin->setState(GameCoin::LIVE); }
void HelloWorld::changeCoin(int index1, int index2){ Point tmpPos; GameCoin* tmpCoin1 = (GameCoin*)_gameCoins->objectAtIndex(index1); GameCoin* tmpCoin2 = (GameCoin*)_gameCoins->objectAtIndex(index2); tmpPos = tmpCoin2->getPosition(); tmpCoin2->setPosition(tmpCoin1->getPosition()); // tmpCoin1->setPosition(tmpPos); moveCoin(tmpCoin1, tmpPos); _gameCoins->exchangeObjectAtIndex(index1, index2); }
실행 결과 코인이 아래로 움직이면서 내려오면 성공입니다.