cocos2d-x 공부용2014. 9. 15. 16:38

원글 출처 : 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();
}

실행 결과


새로운 코인이 위에서 내려옵니다.




Posted by 아이시네프