원글 출처 : http://horns.tistory.com/15
-11- 새로운 코인을 생성
1. 사라진 코인의 개수는?
HelloWorldScene.h
class HelloWorld : public cocos2d::Layer { private: .. int _lineDeadCoin[BOARD_X]; public: ... void addNewCoin(); void setNewCoin(GameCoin* coin); void addNewCoinAction(); };
2. 코인 생성
HelloWorldScene.cpp
void HelloWorld::addNewCoin() { GameCoin* coin; int line = 0; for (int i = 0; i < BOARD_X; i++) { _lineDeadCoin[i] = 0; } for (int i = 0; i < _gameCoins->count(); i++) { coin = (GameCoin*) _gameCoins->objectAtIndex(i); if (coin->getState() == GameCoin::DEAD) { line = (int) (i / BOARD_Y); _lineDeadCoin[line] += 1; setNewCoin(coin); } } addNewCoinAction(); }
void HelloWorld::setNewCoin(GameCoin* coin){ String* name; Texture2D* texture; int coinType = rand() % TOTAL_COIN_TYPE + 1; //반드시 +는 띄어쓰기 해야함. 아니면 rand()%4가 아니라 rand()%5가 될 수 있음. name = String::createWithFormat("coin_0%i.png", coinType); texture = TextureCache::sharedTextureCache()->addImage(name->getCString()); coin->setTexture(texture); coin->setVisible(true); coin->setType(coinType); coin->setState(GameCoin::LIVE); }
void HelloWorld::addNewCoinAction(){ GameCoin* coin; Point pos; int startIndex; int diffY = _screenSize.height * 0.097f; for(int i = 0; i < BOARD_X; i++){ if(_lineDeadCoin[i] > 0){ startIndex = i*BOARD_Y; for(int j = startIndex; j< startIndex+_lineDeadCoin[i]; j++){ coin = (GameCoin*)_gameCoins->objectAtIndex(j); pos = coin->getPosition(); coin->setPosition(ccp(pos.x, pos.y+(_lineDeadCoin[i]*diffY))); moveCoin(coin, pos); } } } }
void HelloWorld::onTouchEnded(Touch* touch, Event* event) { auto target = event->getCurrentTarget(); Point location = target->convertToNodeSpace(touch->getLocation()); clearSelectCoin(); moveUpDeadCoin(); addNewCoin(); }
실행 결과
새로운 코인이 위에서 내려옵니다.