国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - 使用C++進行Cocos2d-x游戲開發入門過程中的要點解析

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

2021-03-18 14:52C++教程網 C/C++

這篇文章主要介紹了使用C++進行Cocos2d-x游戲開發入門過程中的要點解析,主要針對畫面變化以及觸摸響應方面,需要的朋友可以參考下

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

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

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

一.畫面的變化.

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

1.畫面整體變暗

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

 

?
1
2
3
4
5
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(底板),是不是很好明白,讓我們用代碼來實現吧:

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

讓我來加入模板:

?
1
2
3
4
5
6
7
8
9
10
//創建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),因此我們要改變選項:

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

效果如下,是不是很棒:

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//創建cliper
CCClippingNode* 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).開啟觸摸

?
1
2
3
4
5
6
7
8
9
bool CTeachLayer::init()
{
 if (!CCLayer::init())
 {
 return false;
 }
 setTouchEnabled(true);
 return true;
}

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

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

3).在ccTouchBegan判斷觸點

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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事件將會以新的數據向下傳遞!這樣下面的按鈕就能響應到了!

讓我們看看代碼吧:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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,游戲開始!

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
主站蜘蛛池模板: 日韩美女毛片 | 色狠狠网 | 亚洲日本中文字幕 | 91精品一区二区三区久久久久久 | 久久久婷婷 | 一级毛片一级毛片一级毛片 | 国产一区二区在线免费观看 | 精品国产久 | 91精品一区二区 | 久久亚洲综合 | 91精品蜜臀在线一区尤物 | 亚洲福利| 国产高清视频一区二区 | 久久这里只有精品8 | 在线精品亚洲欧美日韩国产 | 欧美一区永久视频免费观看 | 午夜影院在线观看 | 日韩欧美一级片在线观看 | 日本不卡免费新一二三区 | 另类五月 | 国产一级黄色大片 | 日韩欧美一区二区三区 | 精品黄色一级片 | 久久久久久久久国产 | 国产特级毛片aaaaaaa高清 | 女人爽到高潮aaaa电影 | 国产中文视频 | 欧美一级片免费在线观看 | 97国产精品久久久 | 成人亚洲| 欧美成人影院 | 亚洲综合一区二区三区 | 一区二区三区高清视频在线观看 | 国产美女久久 | av在线免费网址 | 国产精品射 | 欧美一级片在线 | a级毛片免费高清视频 | 亚洲一区 日韩精品 中文字幕 | 国产精品一码二码三码在线 | 欧美在线综合 |