我的博客: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,表示这里应该是消除掉了,是空格。

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

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

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

转载于:https://www.cnblogs.com/mfrbuaa/p/5176252.html

cocos2d-x3.6 连连看连通画线相关推荐

  1. cocos2d-x3.x实现屏幕画线并添加刚体属性

    为了方便理解,本文分为如下两部分: 实现屏幕画线 为线段添加刚体属性 实现屏幕画线 效果预览 涉及内容 触摸机制 线段绘制方法 创建 PhysicWorld 类 在头文件**PhysicWorld.h ...

  2. 【cocos2dx 3.x】画线

    转载自:http://www.cnblogs.com/Richard-Core/p/3836100.html 关于cocos2d-x 3.2 版本的绘图方法有两种 1.使用DrawNode类绘制自定义 ...

  3. OpenCV 画点 画线 画框 写字操作

    画点 画线 画框 写字操作 在使用OpenCV的时候经常会需要用到画点画线画框写字等等操作,这里演示一下这些操作的方法 #include <opencv2/core/core.hpp> # ...

  4. 百度地图轨迹回放,自定义路书,边走边画线

    转自:https://www.cnblogs.com/syj2016/p/5685294.html 百度地图轨迹回放,自定义路书,边走边画线 在原有的百度路书的基础上,做了修改,使其能实现边走边画线的 ...

  5. JAVA实现中点画线_实验1-中点画线和Bresenham画线算法的实现

    <实验1-中点画线和Bresenham画线算法的实现>由会员分享,可在线阅读,更多相关<实验1-中点画线和Bresenham画线算法的实现(9页珍藏版)>请在人人文库网上搜索. ...

  6. 18怎么确定板子形状_板绘怎么画线条排线?板绘小白画线不稳怎么办?

    想学习绘画去找不到方法?小编为大家提供一套学习素材~~领取方式在文章最后~~ 很多初学者在刚刚接触板绘的时候经常会因为手不稳而无法控制线条的运用,导致画面显得粗糙,形状或结构不标准,画面花等等问题. ...

  7. 毛边效果 html,Html5 Canvas画线有毛边解决方法

    例外参考:http://jo2.org/html5-canvas%E7%94%BB%E5%9B%BE3%EF%BC%9A1px%E7%BA%BF%E6%9D%A1%E6%A8%A1%E7%B3%8A% ...

  8. OpenCV在图像上画线、矩形、椭圆、多边形、填充的多边形、圆、显示文字

    OpenCV在图像上随机画直线.椭圆.多边形.圆.显示文字 代码如下: /*** @file Drawing_2.cpp* @brief Simple sample code*/#include &l ...

  9. Bresenham 算法画线 画圆

    最近作业在做 graphics driver 涉及到 Bresenham 画线以及画圆算法,以防自己忘记了总结一些知识点以及源码. 所有代码的输入参数类型都是 unsinged int Bresenh ...

最新文章

  1. 苹果微信更新不了最新版本_微信版本又双叒叕更新了,这个功能正式下线
  2. 【实战分享】使用Core Audio实现VoIP通用音频模块
  3. CometOJ#6 双倍快乐(简单DP)
  4. 可持久化3--可持久化01Trie
  5. java小区管理的项目描述,基于jsp的小区信息管理-JavaEE实现小区信息管理 - java项目源码...
  6. 随想录(SEO笔记)
  7. Windows下调试hadoop
  8. 5个基于Javascript的桌面
  9. 什么是Zepto.js
  10. Win2008系统下装CTBS之前的系统组件安装向导第一篇
  11. Linux虚拟机中安装vim(超详细)
  12. 91手机助手官网iPhone版 v5.3.2 官方版
  13. 晶体二极管工作原理(详解)
  14. 尚医通——后台搭建——MybatisPlus自动填充和乐观锁
  15. 如何把一张透明的图片做成不透明的
  16. Power BI——DAX函数(数据分析表达式)
  17. 第四章 使用 matplotlib 绘制散点图
  18. 电子计算机显示屏维修,液晶显示器闪烁如何处理_液晶显示器维修教程
  19. Codis的原理以及部署—— CODIS (分布式 Redis 解决方案)
  20. python怎样批量修改文件大小_python:批量修改文件名批量修改图片尺寸

热门文章

  1. pythonnamedtuple定义类型_python-自定义type.NamedTuple
  2. mysql添加外键约束失败cannot add foreign key constraint
  3. 【三分钟讲清区块链/比特币】之二:比特币入门教程
  4. [深度学习] 自然语言处理 --- 文本分类模型总结
  5. FLASH ERASE:CHIP、BLOCK、SECTOR
  6. React.js开发生态系统概览 [译-转]
  7. 无监督学习 k-means_无监督学习-第3部分
  8. watson软件使用_使用Watson Assistant进行多语言管理
  9. 测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站测试回收站
  10. vim的模式及常用命令