我的博客:http://blog.csdn.net/dawn_moon
網上看到非常多人寫的連連看,都沒有畫連線的實現。事實上要話連線挺簡單的。cocos2d-x 提供了一個非常方便的繪圖形的類。DrawNode。這個類封裝了非常多畫線條,多邊形的方法。非常方便,非常好用。非常強大。
DrawNode的使用非常easy,我使用一個成員變量來保存這個DrawNode,由于會一直反復使用。
mDraw = DrawNode::create();
addChild(mDraw, 1000);
它的使用跟精靈一樣,create出來以后,add到當前層。
void GameScene::drawLine()
{// 畫線if (mPath.size() >= 2) {Vec2 *vecs = new Vec2[mPath.size()];for (int i = 0 ; i < mPath.size(); i++) {vecs[i] = indextoScreen(mPath.at(i).x, mPath.at(i).y);}// 隨機給線條一個顏色auto color = CCRANDOM_0_1();// 循環畫線段,僅僅有線段能夠設置線條寬度for (int i = 0 ; i < mPath.size(); i++) {if ( i > 0) {mDraw->drawSegment(vecs[i-1], vecs[i], 5, Color4F(color, color, color, 1));}}// 連通的兩個圖標相應的地圖數組置0Vec2 p1 = mPath.front();mMap[(int)p1.x][(int)p1.y] = 0;Vec2 p2 = mPath.back();mMap[(int)p2.x][(int)p2.y] = 0;// 刪掉線段的頂點數組delete []vecs;// 清除連通的圖標。同一時候清除路徑點scheduleOnce(SEL_SCHEDULE(&GameScene::clearMatched), 0.2);}}
前面講了。我們將兩個圖標連通的路徑關鍵點存在了一個容器mPath里面。至少會有2個點,最多4個點。
然后我們用DrawNode里面的drawSegment()函數來畫連線。
這個函數是畫線段的,就是兩個點一條線,為什么要用這個函數。DrawNode里面另一個函數能夠用來畫多角形,原型例如以下:
void drawPoly(const Vec2 *poli, unsigned int numberOfPoints, bool closePolygon, const Color4F &color);
這個函數參數有個bool closePolygon,能夠用來畫閉合或開放多角形,簡直一步到位了。可是它不能設置線條粗細,畫出來的線條非常細,默認的寬度,不太合適。
然后我採用了畫線段的函數。將路徑里面的點,循環取出來。兩個點畫一個線段。原型:
void drawSegment(const Vec2 &from, const Vec2 &to, float radius, const Color4F &color);
第一個參數。開始頂點,第二參數,目的頂點,第三個參數。線條寬度。第四個參數。線條顏色。
畫完連線以后呢,將兩個圖標的數組置0,表示這里應該是消除掉了,是空格。
然后刪除掉頂點數組,然后調清理圖標的函數。
這個連連看的基本功能就完畢了。
后面還有倒計時。自己主動提示兩個功能。那么一個完整的連連看就完畢了。