1: void GameLogoScene::v1Load()
2: {
3: v1 = new std::vector<CCSprite*>;
4:
5: v1AddTime =0;
6: }
7:
8: void GameLogoScene::v1Add()
9: {
10: v1AddTime++;
11: if(v1AddTime>=1)
12: {
13: v1AddTime =0;
14:
15: CCSprite* tempspr = CCSprite::spriteWithFile("CloseNormal.png");
16:
17: tempspr->setPosition(ccp(rand()%400,rand()%200));
18:
19: this->addChild(tempspr);
20:
21: v1->push_back(tempspr);
22: }
23:
24: }
第 1 ~ 6 行為定義 v1 的方法, 第3行定義 v1 存放物件為 CCSprite 指標,第5行初始化 v1addTime
第 8 ~ 24 行將 CCSprite指標加入 v1 方法, 第 10 ~ 11 行限制 v1 加入物件的速度,第 15 行設定加入的 CCSprite , 第 17 行設定座標,第 19 行將 CCSprtite 加入 layer ,第 21 行將 CCSprite 加入 v1,接著在建構子放入 v1Load()
1: GameLogoScene::GameLogoScene(void)
2: {
3: v1Load();
4:
5: //初始化各項數值
6: this->initWithColor(ccc4(255,255,255,255));
7: sleep = false;
8: gameFlow = 1;
9: GF1Time = 0;
10: logoSprActTime =0;
11:
12: logoSprLoad();
13:
14: //加入schedule
15: this->schedule( schedule_selector(GameLogoScene::Run),1); //加入schedule
16:
17:
18: }
在 Run 迴圈中放入 v1Add()
1: void GameLogoScene::visit()
2: {
3: if(gameFlow==GAMEFLOW1)
4: {
5: this->draw();
6:
7: logoSpr->visit();
8:
9:
10: std::vector<CCSprite*>::iterator iter;
11: for(iter = v1->begin() ; iter != v1->end() ; ++iter)
12: {
13:
14: CCSprite* temp = *iter;
15:
16: temp->visit();
17:
18: }
19:
20: }
21:
22: }
其中 visit() 在第 10 行使用迭代器搜尋所有在 v1 中的物件(第 11 行), 在第 16 行繪出 CCSprite,最後記得不要接續下一個流程(HelloWorld),執行吧,你應該會看到不少開關在螢幕上出現
到目前為止我們將物件加入 vector, 當然也可以刪除 vector 中的物件,在 ccTouchesEnded 中修改
1: void GameLogoScene::ccTouchesEnded(CCSet* touches, CCEvent* event)
2: {
3:
4: CCTouch* touch = (CCTouch*)( touches->anyObject() );
5:
6: CCPoint location = touch->locationInView();
7:
8: location = CCDirector::sharedDirector()->convertToGL(location);
9:
10: CCLog("convertToGLXY x:%f, y:%f", location.x, location.y);
11:
12: std::vector<CCSprite*>::iterator iter;
13:
14: for(iter = v1->begin() ; iter != v1->end() ;)
15: {
16:
17: CCSprite *temp = *iter;
18:
19: if(location.x>temp->getPositionX() && location.x<temp->getPositionX()+temp->getContentSize().width
20: && location.y>temp->getPositionY() && location.y<temp->getPositionY()+temp->getContentSize().height)
21: {
22:
23: iter = v1->erase(iter);
24:
25: }
26: else
27: {
28: iter++;
29: }
30: }
31: }
第 12 行使用迭代器來搜尋 v1 所有的物件
第 19 ~ 20 行判斷觸碰的點(座標)是否在 CCSprite物件上,是的話就刪除(23行),否的話就搜尋下1個CCSprite,這篇介紹如何在 cocos2d-x 中使用 vector ,並加入和刪除物件