我的博客: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));
}
} // 连通的两个图标相应的地图数组置0
Vec2 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,表示这里应该是消除掉了,是空格。

然后删除掉顶点数组,然后调清理图标的函数。

这个连连看的基本功能就完毕了。

后面还有倒计时。自己主动提示两个功能。那么一个完整的连连看就完毕了。

cocos2d-x3.6 连连看连通画线的更多相关文章

  1. ios cocos2d 画线出现闪烁问题

    根据http://www.merowing.info/2012/04/drawing-smooth-lines-with-cocos2d-ios-inspired-by-paper/ 用cocos2d ...

  2. matplotlib画线(2)

    这篇随笔是matplotlib画线的补充>>> #nocl参数控制图例中有几列,>>> import numpy as np>>> import ...

  3. 用OpenGL画线

    . 两点之间的连线称之为线段,在屏幕上显示线段放在现在已经不是稀奇的事情,大多数高级图形API都可以轻松实现,我尝试用OpenGL画线,在这里记录一下收获. . OpenGL这个级别的图形API,通常 ...

  4. MFC画线功能总结

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6216464.html MFC画线功能要点有二:其一,鼠标按下时记录初始位置为线的起始 ...

  5. MFC消息映射机制以及画线功能实现

    ---此仅供用于学习交流,切勿用于商业用途,转载请注明http://www.cnblogs.com/mxbs/p/6213404.html. 利用VS2010创建一个单文档标准MFC工程,工程名为Dr ...

  6. CGContextRef 画线简单用法

    CGContextRef CGContextMoveToPoint(context,150,50);//圆弧的起始点 CGContextAddArcToPoint(context,100,80,130 ...

  7. Android中Path类的lineTo方法和quadTo方法画线的区别

    转载:http://blog.csdn.net/stevenhu_223/article/details/9229337 当我们需要在屏幕上形成画线时,Path类的应用是必不可少的,而Path类的li ...

  8. C#使用 DirectX SDK 9做视频播放器 并在视频画线添加文字 VMR9

    视频图像处理系列 索引 VS2013下测试通过. 在百度中搜索关键字“DirectX SDk”,或者进入微软官网https://www.microsoft.com/en-us/download/det ...

  9. iOS小画板画线总结

    一:基本画线: 使用贝赛尔曲线画: //创建路径 UIBezierPath* aPath = [UIBezierPath bezierPath]; //设置线宽 aPath.lineWidth = 5 ...

随机推荐

  1. zoom和transform:scale()的区别

    zoom和transform:scale()都可以用于缩放,目前移动端存在各种各样不同屏幕大小的手机,为了兼容不同宽度的屏幕,我们可以基于某一屏幕宽度大小(比如iPhone5的320,这个根据设计稿来 ...

  2. POJ 3623 Best Cow Line, Gold(字符串处理)

    题意:给你一个字符串,让你重新排列,只能从头或者尾部取出一个放到新字符串队列的最后.按照字典序. 解决方法:比较前后两个的大小,谁小输出谁,相等,就往当中比来确定当前应该拿最前面的还是最后面的,如果再 ...

  3. BZOJ 1316: 树上的询问( 点分治 + 平衡树 )

    直接点分治, 用平衡树(set就行了...)维护. -------------------------------------------------------------------------- ...

  4. 修改spfile导致oracle无法启动

    今天尝试着调整一下数据库的性能,由于疏忽没有做好备份(spfile.ora),直接修改了MEMORY_TARGET参数,alter system set MEMORY_TARGET=4096m;导致重 ...

  5. poj 3185 The Water Bowls 高斯消元枚举变元

    题目链接 给一行0 1 的数, 翻转一个就会使他以及它左右两边的都变, 求最少多少次可以变成全0. 模板题. #include <iostream> #include <vector ...

  6. linux用户管理最常用的三个文件说明(不完整版)

    涉及到三个文本文件:/etc/passwd /etc/shadow /etc/group 文件相关: /etc/passwd和用户名相关 /etc/shadow和密码相关 /etc/group和用户所 ...

  7. 提供基于Lesktop的IM二次开发,联系QQ:87172811

    提供基于Lesktop的IM二次开发,联系QQ:87172811

  8. 转: css3: display:box详解

    示例见:  css3: flexbox (BTW: blog不能包含iframe script真不方便啊~~) display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决 ...

  9. 17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment 引入额外的Slaves 到一个存在的复制

    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment 引入额外的Slaves 到一个存在的复制环境 ...

  10. HDU 2178 猜数字

    题解:设猜到的最大的数是h,在1到h间,你最多只要猜log2(h)+1(取整)次,所以易知==>h=2^m-1.即猜m次,能猜到的最大的数为2^m-1. #include <cstdio& ...