日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【玩转cocos2d-x之十五】关卡选择的设计

發布時間:2024/4/11 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【玩转cocos2d-x之十五】关卡选择的设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原創作品,轉載請標明:http://blog.csdn.net/jackystudio/article/details/12966993


這節介紹一下游戲中幫助界面和關卡選擇的設計,其實都是一樣的,關鍵在于美工。這里采用自定義TableView層來實現。


1.導入頭文件和設定空間

因為TableView相關的類是在擴展包里面,所以必須先聲明

[cpp]?view plaincopy
  • #include?"cocos-ext.h"??
  • USING_NS_CC_EXT;??

  • 2.繼承的實現

    自定義TableView繼承于CCLayer,因此可以捕獲觸摸,同時繼承于擴展包的CCTableViewDataSource和CCTableViewDelegate。前者是TableView的數據源,包含了一系列和TableView數據單元相關的操作,后者則是繼承于CCScrollViewDelegate抽象類,聲明了一些和滾動,放大,觸摸回調之類的接口,然后在內部包含了一個CCTableView,這用起來有點像Android的Adapter。當然分別繼承幾個類使用也是一樣的。

    先看一下要實現的接口吧。

    [cpp]?view plaincopy
  • class?TableViewTestLayer?:?public?cocos2d::CCLayer,?public?cocos2d::extension::CCTableViewDataSource,?public?cocos2d::extension::CCTableViewDelegate??
  • {??
  • public:??
  • ????virtual?bool?init();????
  • ??
  • ????CREATE_FUNC(TableViewTestLayer);??
  • ??????
  • ????virtual?void?scrollViewDidScroll(cocos2d::extension::CCScrollView*?view){}//滾動時調用,空實現,因為繼承了抽象類所以必須重寫??
  • ????virtual?void?scrollViewDidZoom(cocos2d::extension::CCScrollView*?view){}//縮放時調用,空實現,同上??
  • ????virtual?void?tableCellTouched(cocos2d::extension::CCTableView*?table,?cocos2d::extension::CCTableViewCell*?cell);//觸摸單元時回調??
  • ????virtual?cocos2d::CCSize?tableCellSizeForIndex(cocos2d::extension::CCTableView?*table,?unsigned?int?idx);//設定單元所占大小??
  • ????virtual?cocos2d::extension::CCTableViewCell*?tableCellAtIndex(cocos2d::extension::CCTableView?*table,?unsigned?int?idx);//設定單元內容??
  • ????virtual?unsigned?int?numberOfCellsInTableView(cocos2d::extension::CCTableView?*table);//返回單元數??
  • };??
  • 當然還有一些其他功能,如高亮,循環,看情況重載。


    3.自定義TabView層各模塊的實現


    3.1.初始化函數init

    [cpp]?view plaincopy
  • CCSize?winSize?=?CCDirector::sharedDirector()->getWinSize();??
  • ???CCTableView*?tableView?=?CCTableView::create(this,?winSize);//創建一個CCTableView??
  • ???tableView->setDirection(kCCScrollViewDirectionHorizontal);//設置方向??
  • ???tableView->setPosition(ccp(0,winSize.height/2-50));??
  • ???tableView->setDelegate(this);//這句話很重要,把taleView和當前類綁到一起,所以后面的調用主體都是tableView??
  • ???this->addChild(tableView);??
  • ???tableView->reloadData();??

  • 3.2.觸摸回調tableCellTouched

    [cpp]?view plaincopy
  • void?TableViewTestLayer::tableCellTouched(CCTableView*?table,?CCTableViewCell*?cell)??
  • {??
  • ????CCLOG("cell?touched?at?index:?%i",?cell->getIdx());//cell為當前選擇單元??
  • }??

  • 3.3.單元大小tableCellSizeForIndex

    [cpp]?view plaincopy
  • CCSize?TableViewTestLayer::tableCellSizeForIndex(CCTableView?*table,?unsigned?int?idx)??
  • {??
  • ????//if?(idx?==?2)?{??
  • ????//????return?CCSizeMake(100,?100);//第2個大小為100,100??
  • ????//}??
  • ????return?CCSizeMake(120,?120);其余為120,120??
  • }??

  • 3.4.設置數據源tableCellAtIndex

    [cpp]?view plaincopy
  • CCTableViewCell*?TableViewTestLayer::tableCellAtIndex(CCTableView?*table,?unsigned?int?idx)??
  • {??
  • ????CCString?*string?=?CCString::createWithFormat("%d",?idx);??
  • ????CCTableViewCell?*cell?=?table->dequeueCell();??
  • ????if?(!cell)?{??
  • ????????cell?=?new?CCTableViewCell();//創建單元,如果要自定義單元效果,需繼承CCTableViewCell,并重載draw函數??
  • ????????cell->autorelease();??
  • ????????CCSprite?*sprite?=?CCSprite::create("HelloWorld.png");??
  • ????????sprite->setScale(0.2f);??
  • ????????sprite->setPosition(ccp(60,?60));??
  • ????????sprite->setTag(123);??
  • ????????cell->addChild(sprite);//添加到cell??
  • ????????CCLabelTTF?*label?=?CCLabelTTF::create(string->getCString(),?"Helvetica",?20.0);??
  • ????????label->setPosition(ccp(60,10));??
  • ????????label->setTag(456);??
  • ????????cell->addChild(label);//添加到cell??
  • ????}??
  • ????else??
  • ????{??
  • ????????CCLabelTTF?*label?=?(CCLabelTTF*)cell->getChildByTag(456);??
  • ????????label->setString(string->getCString());??
  • ????}??
  • ????return?cell;??
  • }??

  • 3.5.單元數numberOfCellsInTableView

    [cpp]?view plaincopy
  • unsigned?int?TableViewTestLayer::numberOfCellsInTableView(CCTableView?*table)??
  • {??
  • ????return?20;//直接返回設定單元數??
  • }??


  • 4.效果圖

    ? ? ?? ? ?


    5.源碼下載地址

    http://download.csdn.net/detail/jackyvincefu/6422401

    總結

    以上是生活随笔為你收集整理的【玩转cocos2d-x之十五】关卡选择的设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。