亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

2020-05-23 14:11:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了使用C++進行Cocos2d-x游戲開發入門過程中的要點解析,主要針對畫面變化以及觸摸響應方面,需要的朋友可以參考下
 

總結了下,新手引導的要點有以下幾個:

  • 畫面的變化.
  • 觸摸和按鈕響應.
  • 邏輯處理及代碼組織.

下面我們就詳細講述這幾個要點:

一.畫面的變化.

對個這個不同的游戲的做法不盡相同,歸結起來大概有這么幾種:

1.畫面整體變暗

這個比較簡單,cocos2d就有現成接口:

 

CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();//第一個參數是顏色ccc4(r,g,b,a) a取值(0~255),越大越不透明 下面兩個參數為寬高,不傳默認為屏幕大小CCLayerColor* pLayer=CCLayerColor::create(ccc4(0,0,0,200),visibleSize.width,visibleSize.height);//CCLayerColor* pLayer=CCLayerColor::create(ccc4(0,0,0,200));addChild(pLayer,100);

效果如下:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

然后你可以在這層之上添加精靈,最后的效果可能是這個樣子的:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

注:圖片源自網絡,如果有版權問題~你丫去死吧! 請聯系我!

2.局部高亮

比較簡單的方法是準備幾張張局部高亮的圖片,隨著引導進度變化而切換!優點是可以做的比較精美,缺點是資源量會比較大!另一種方法是在畫面整體變暗的基礎上摳掉部分區域,還好cocos2d提供了CCClippingNode接口(2.1+版)!

CCClippingNode類比較復雜,但我們只用明白兩個東西就好:一個是CCClippingNode的Stencil,一個CCClippingNode的Child,怎么理解呢?請看下圖:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

這個東西相信大家都有印象吧,上面的圖案(鏤空部分)就是 CCClippingNode的Stencil(模板),實體部分就是CCClippingNode的child(底板),是不是很好明白,讓我們用代碼來實現吧:

//創建cliper對象CCClippingNode* pClip=CCClippingNode::create();addChild(pClip);//加入灰色的底板CCLayerColor* pColor=CCLayerColor::create(ccc4(0,0,0,200));pClip->addChild(pColor);

讓我來加入模板:

//創建drawnode對象CCDrawNode *m_pAA=CCDrawNode::create();static ccColor4F green = {0, 1, 0, 1};static CCPoint rect[4]={ccp(-50,50),ccp(50,50),ccp(50,-50),ccp(-50,-50)};//用上面的數據保存一個100x100的矩形m_pAA->drawPolygon(rect, 4, green, 0, green);//設置到屏幕的中心m_pAA->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));//設置為pclip的模板pClip->setStencil(m_pAA);

CCDrawNode是用來繪制幾何圖形的,drawPolygon使用繪制多邊形,參數為頂點數組,頂點數量,邊框寬度,和填充顏色!這里要注意一點:千萬不要addChild(m_pAA);因為一旦addchild,m_pAA就會被繪制出來,我們是要用它做剪裁!他會在CCClippingNode內部被使用!

我們會看到這樣的效果:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

額,貌似和我們想想的不太一樣啊,為什么呢?那是因為CCClippingNode有一個選項是是否反向,既顯示Stencil呢還是child減去Stencil的部分!默認為顯示顯示鏤空(Stencil)部分(false),因此我們要改變選項:

//是否反向?pClip->setInverted(true);

效果如下,是不是很棒:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

3.組合效果(將2的矩形改成圓,再加上圖片)

讓我們先看這張圖片,是不是很棒?右下角黃色矩形區域是高亮的,在配上圖片說明,很不錯的效果!

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

讓我們來實現類似的效果吧,用到的資源:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

//創建cliperCCClippingNode* pClip=CCClippingNode::create();pClip->setInverted(true);addChild(pClip);//添加底板CCLayerColor* pColor=CCLayerColor::create(ccc4(0,0,0,200));pClip->addChild(pColor);//繪制圓形區域static ccColor4F green = {0, 1, 0, 1};//頂點顏色,這里我們沒有實質上沒有繪制,所以看不出顏色float fRadius=55.0f;//圓的半徑const int nCount=100;//圓形其實可以看做正多邊形,我們這里用正100邊型來模擬園const float coef = 2.0f * (float)M_PI/nCount;//計算每兩個相鄰頂點與中心的夾角static CCPoint circle[nCount];//頂點數組for(unsigned int i = 0;i <nCount; i++) { float rads = i*coef;//弧度 circle[i].x = fRadius * cosf(rads);//對應頂點的x circle[i].y = fRadius * sinf(rads);//對應頂點的y}CCDrawNode *pStencil=CCDrawNode::create();pStencil->drawPolygon(circle, nCount, green, 0, green);//繪制這個多邊形!//動起來pStencil->runAction(CCRepeatForever::create(CCSequence::createWithTwoActions(CCScaleBy::create(0.05f, 0.95f), CCScaleTo::create(0.125f, 1))));pStencil->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));//設這模板pClip->setStencil(pStencil);//添加圓和手的圖片CCSprite*pCircle=CCSprite::create("circle.png");pCircle->setPosition(ccp(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));pCircle->runAction(CCRepeatForever::create(CCSequence::createWithTwoActions(CCScaleBy::create(0.05f, 0.95f), CCScaleTo::create(0.125f, 1))));addChild(pCircle);CCSprite* pHand=CCSprite::create("hand.png");pHand->setAnchorPoint(ccp(0.0f,1.0f));pHand->setPosition(ccp(pCircle->getContentSize().width/2,pCircle->getContentSize().height/2));pCircle->addChild(pHand);

上面是全部的代碼,效果圖如下(動態的會更好)沒有加圓圈和手之前和之后:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

那么如何改變高亮區域得位置呢?很簡單,只用改變pStencil的位置即可!可以考慮記為成員變量在ccTouchesBegan中改變位置,這樣就會高亮區域就會跟著你的鼠標走啦!

二.觸摸和按鈕響應

1.開啟觸摸 阻止穿透響應 判斷落點

讓我們繼續看下面的這張圖片:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

這張圖片中應該只有右下角的”冒險”按鈕能夠響應的到,在這里說下思路:

為了讓其他區域的按鈕響應不到,我們應該提高上層(CClayer)的響應優先級為-128和按鈕一樣,這樣的話如果上層(CClayer)后加入游戲addchild的話,會先收到觸摸消息.
在收到觸摸消息ccTouchBegan時,判斷點擊的地方是否在黃色矩形區域中,在的話return false 交給下層的按鈕去響應,否則return true 阻止消息繼續傳遞.
下面是代碼片段:
1).開啟觸摸

bool CTeachLayer::init(){ if (!CCLayer::init()) { return false; } setTouchEnabled(true); return true;}

2).提升觸摸響應優先級為-128

void CTeachLayer::registerWithTouchDispatcher(){//使用-128和CCMenu優先級相同,并且吞掉事件true//CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);CCLayer::registerWithTouchDispatcher();}

3).在ccTouchBegan判斷觸點

bool CTeachLayer::ccTouchBegan( CCTouch* pTouch, CCEvent* pEvent ){    //得到觸摸位置 CCPoint touchPoint = pTouch->getLocation();    //聲明一個右下角100x50的矩形 CCRect m_obRect=CCRectMake( CCDirector::sharedDirector()->getVisibleSize().width-100, CCDirector::sharedDirector()->getVisibleSize().height-50, 100, 50);    //判斷點是否在矩形中 if (m_obRect.containsPoint(touchPoint)) { return false; } return true;}

大功告成,快去試一下吧!

2.精確命中

手機上和電腦上的觸摸事件的區別在于:電腦上我們是用鼠標點擊,而手機上使用手指去摁,觸摸的精度的高低不言而喻!讓我們來看下面這張圖片:

使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

讓我們看右上角的X號按鈕,在手機上點擊它來說應該是很困難的!他的真實尺寸應該是紅色矩形的區域(假設:50x50),為了讓玩家在引導時,能夠很方便的點擊到它,我們將實際的可觸摸區域設置為藍色區域(假設:100x100),這樣應該很好點到了吧!

這樣會有一個新的問題,如果點擊到紅色和藍色之間的區域,下面的x按鈕時響應不到的,那么怎么辦呢?我們需要修改touch的數據(設置為按鈕的正中心),然后touch事件將會以新的數據向下傳遞!這樣下面的按鈕就能響應到了!

讓我們看看代碼吧:

bool CTeachLayer::ccTouchBegan( CCTouch* pTouch, CCEvent* pEvent ){ CCPoint touchPoint = pTouch->getLocation(); if (!CGlobal::s_bTeach) { return false; }    //假設按鈕在(300,200)的位置,那么藍色矩形如下: CCRect m_obRect=CCRectMake( 250, 150, 100, 100); if (m_obRect.containsPoint(touchPoint)) {        //得到藍色矩形的中心點(300,200) CCPoint pos=ccp(m_obRect.getMidX(),m_obRect.getMidY());        //這里要轉化為UI坐標系(左上角為0,0點) pos=CCDirector::sharedDirector()->convertToUI(pos);        //設置觸摸信息 pTouch->setTouchInfo(pTouch->getID(),pos.x,pos.y); return false; } return true;}

三.邏輯處理及代碼組織

這里我大概說下新手引導的架構,代碼肯定貼不出來,太多太亂,說的不對的地方,歡迎大家拍磚吐槽!>_<

1.首先創建了一個CTeachLayer繼承自CCLayer,添加到游戲的最上層(UI層之上),記住,要先添加游戲的其層,最后添加CTeachLayer,可以保存全局指針!

2.用一個枚舉記下你要引導的所有步驟,在根據枚舉值去設置高亮的位置及觸摸區域!可以記下當前引導的進度,以方便下次繼續引導!

3.游戲邏輯中免不了要判斷引導(例:出第3波怪的時候引導玩家使用清屏道具),用全局的指針去設置引導的步驟!

4.引導完成后移除CTeachLayer,游戲開始!



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美在线欧美在线| 亚洲精品成人免费| 91香蕉嫩草影院入口| 欧美精品videossex性护士| 亚洲精品之草原avav久久| 亚洲精品影视在线观看| 国产精品av网站| 亚洲自拍欧美另类| 中文字幕不卡在线视频极品| 综合欧美国产视频二区| 亚洲国产三级网| 日韩中文字幕在线播放| 668精品在线视频| 亚洲xxxxx电影| 国产亚洲成av人片在线观看桃| 国产欧美日韩视频| 在线看片第一页欧美| 亚洲欧美日韩中文在线| 久久视频在线看| 91精品国产一区| 亚洲精品久久久久久久久| 精品无人国产偷自产在线| 欧美另类在线播放| 久久成人精品视频| 亚洲欧美日韩精品久久奇米色影视| 成人亚洲综合色就1024| 日韩在线视频一区| 国外视频精品毛片| 日韩中文视频免费在线观看| 欧美日本国产在线| www.久久撸.com| 久热爱精品视频线路一| 91天堂在线视频| 日韩欧美精品免费在线| 国产欧美一区二区三区久久人妖| 精品视频—区二区三区免费| 久久久www成人免费精品张筱雨| 夜夜嗨av色综合久久久综合网| 久久久www成人免费精品| 中文在线资源观看视频网站免费不卡| 亚洲天堂2020| 欧美国产日本高清在线| 精品国产成人av| 欧美福利小视频| 亚洲欧美日本另类| 亚洲精品美女视频| 91wwwcom在线观看| 成人xvideos免费视频| 视频直播国产精品| 欧美成人性生活| 91国产美女在线观看| 久久久久久久久国产| 欧美劲爆第一页| 日韩在线观看精品| 福利视频第一区| 精品美女久久久久久免费| 国产一区二区黄| 久久久欧美一区二区| 在线观看不卡av| 色爱av美腿丝袜综合粉嫩av| 亚洲人成网站免费播放| 自拍偷拍亚洲精品| 欧美第一淫aaasss性| 欧美国产日韩视频| 91久久国产精品91久久性色| 久久影院资源网| 亚洲成av人片在线观看香蕉| 中文字幕在线看视频国产欧美| 岛国精品视频在线播放| 热久久视久久精品18亚洲精品| 91免费看片在线| 欧美国产日韩一区二区三区| 久久亚洲精品一区二区| 成人av色在线观看| www.xxxx精品| 亚洲精品国产电影| 亚洲va欧美va国产综合久久| 亚洲天堂精品在线| 国产亚洲精品91在线| 福利视频一区二区| 欧美精品成人91久久久久久久| 日日骚久久av| 国产成人亚洲精品| 精品一区电影国产| 久久久久久久久电影| 国产欧亚日韩视频| 国产一区二区视频在线观看| 亚洲最大激情中文字幕| 一个人看的www欧美| 色综合91久久精品中文字幕| 国产精品福利观看| 中文字幕亚洲一区二区三区五十路| 久久久噜噜噜久久中文字免| 欧美成人中文字幕在线| 97av在线视频免费播放| 亚洲电影免费观看高清完整版在线观看| 欧美老女人xx| 日韩专区在线播放| 国外视频精品毛片| 97婷婷大伊香蕉精品视频| 91亚洲国产成人久久精品网站| 亚洲天堂av在线免费| 理论片在线不卡免费观看| 粉嫩老牛aⅴ一区二区三区| 久久久国产精品视频| 亚洲欧美中文日韩在线v日本| 97超级碰碰人国产在线观看| 亚洲电影在线观看| 亚洲自拍偷拍视频| 欧美精品一区二区三区国产精品| 日本在线精品视频| 一本一本久久a久久精品综合小说| 大胆人体色综合| 亚洲欧洲国产伦综合| 欧美性猛交xxxx偷拍洗澡| 91亚洲精品在线观看| 国产精品偷伦视频免费观看国产| 国产精品日韩在线播放| 日韩免费看的电影电视剧大全| 精品国产老师黑色丝袜高跟鞋| 欧美一级在线播放| 欧美一级视频在线观看| 成人精品aaaa网站| 成人性生交大片免费观看嘿嘿视频| 精品亚洲一区二区三区在线观看| 亚洲xxxx18| 成人黄色网免费| 日韩av影院在线观看| 成人情趣片在线观看免费| 亚洲一区国产精品| 亚洲自拍偷拍色图| 亚洲天堂一区二区三区| 色综合久综合久久综合久鬼88| 亚洲国产日韩欧美在线动漫| 成人做爽爽免费视频| 欧美激情视频在线| 91在线无精精品一区二区| 欧洲成人免费视频| 91在线视频导航| 国产精品美女网站| 精品国产一区二区三区久久狼5月| 在线观看国产欧美| 国产日韩在线视频| www欧美xxxx| 俺去了亚洲欧美日韩| 国产女人精品视频| 日韩在线免费观看视频| 不卡av电影在线观看| 国产精选久久久久久| 久久精品国产亚洲| 国产精品一区二区三区久久| 久久久欧美精品| 亚洲天堂成人在线| 91精品久久久久久久久久久久久| 亚洲欧美综合精品久久成人| 正在播放欧美一区| 久久久久九九九九| 久久精品久久精品亚洲人| 日韩精品免费一线在线观看| 91精品视频网站| 777午夜精品福利在线观看| 欧美日本国产在线| 日韩国产欧美精品一区二区三区| 亚洲系列中文字幕|