Cocos2d-x3.3利用TileMap绘制Polygon/PolyLine

tiled提供了多边形/折线的绘制, 在Cocos2dx3.3(不知道其他版本如何)中能够读取这些对象. 但是网上似乎没有Cocos2dx读取多边形/折线的相关教程. 今天尝试了PolyLine的绘制, 就在这里记录一下, 也希望能够帮到需要的人. 这里只介绍PolyLine的情况. Polygon情况是类似的.

在CCTMXXMLParse.cpp中,有方法

void TMXMapInfo::startElement(void *ctx, const char *name, const char **atts)

找到else if (elementName == "polyline"), 即解析折线的情况

可以看到, 最后一行为dict["polylinePoints"] = Value(pointsArray);

即将解析得到的pointsArray以"polylinePoints"为key存储. 所以我们在第12行用该key获取储存points的ValueVector.

 1     auto map = experimental::TMXTiledMap::create("map.tmx");
 2     //处理对象层
 3     auto objectGroup = map->getObjectGroup("Object");
 4     auto objects = objectGroup->getObjects();
 5     for (auto object: objects)
 6     {
 7         auto dic= object.asValueMap();
 8         float objectX = dic.at("x").asFloat();
 9         float objectY = dic.at("y").asFloat();
10
11         auto drawNode= DrawNode::create();
12         auto pointsVector = dic.at("polylinePoints").asValueVector();
13         auto size = pointsVector.size();
14         //获取点
15         if (size>0)
16         {
17             Vec2* points= new Vec2[size];
18             int i =0 ;
19             for (auto pointValue:pointsVector)
20             {
21                 auto dicp = pointValue.asValueMap();
22                 auto x  = dicp.at("x").asFloat();
23                 auto y  = -dicp.at("y").asFloat();//y取负值
24                 points[i]= Vec2( x , y );
25                 i++;
26             }
27             //绘制折线
28             drawNode->drawPoly(points,size,false,Color4F::RED);
29             delete[] points;
30             drawNode->setPosition(objectX,objectY);
31             this->addChild(drawNode,10);
32         }
33     }

第16行的代码似乎没有实际意义, 因为当对象不是PolyLine时会报错. 所以如果直接使用上面的代码的话, 在tiled中,PolyLine所在的对象层只能有PolyLine对象而不能有其他的对象.

或者在tiled中给PolyLine添加一个类型, 并在代码中进行判断.

tilemap截图

绘制结果

时间: 2024-12-19 00:44:39

Cocos2d-x3.3利用TileMap绘制Polygon/PolyLine的相关文章

PyQt5利用QPainter绘制各种图形

这个例子我做了好几天: 1)官网C++的源码,改写成PyQt5版本的代码,好多细节不会转化 2)网上的PyQt的例子根本运行不了 填了无数个坑,结合二者,终于能完成了一个关于绘图的东西.这个过程也掌握了很多新的知识点 [知识点] 1.关于多个点的使用 poitns = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)] 请看: 1 # 定义多个点 2 points = [QPoint(10, 80), QPoint(2

利用QPainter绘制各种图形(Shape, Pen 宽带,颜色,风格,Cap,Join,刷子)

利用QPainter绘制各种图形 Qt的二维图形引擎是基于QPainter类的.QPainter既可以绘制几何形状(点.线.矩形.椭圆.弧形.弦形.饼状图.多边形和贝塞尔曲线),也可以绘制像素映射.图像和文字.此外,QPainter还支持一些高级特性,例如反走样(针对文字和图形边缘).像素混合.渐变填充和矢量路径等.QPainter也支持线性变换,例如平移.旋转.错切和缩放. 本例子中利用QPainter类提供的各种draw函数,绘制各种类型的图形,包括对图形的形状.颜色.填充风格等的选择. 1

利用JFreeChart绘制股票K线图完整解决方案

http://blog.sina.com.cn/s/blog_4ad042e50100q7d9.html 利用JFreeChart绘制股票K线图完整解决方案 (2011-04-30 13:27:17) 标签: 绘制 股票 k线 it 分类: 软件_Software 因为工作的需要,接触了一些股票图形绘制类的工作,其中最主要的还是股票K线图的绘制了,如果利用编程语言最底层的图形绘制方法去绘制这类图形,如果对编程语言不是特别熟悉的话,一般是有很大的困难的,通过在网上搜索发现,以自己最熟悉的两门语言为

C#利用GDI+绘制旋转文字等效果

C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经过不少的计算过程.利用下面的类可以实现该功能. [csharp] view plaincopy using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D;

C#利用GDI+绘制旋转文字等效果实例

本文实例讲述了C#利用GDI+绘制旋转文字等效果的方法,是非常实用的技巧.分享给大家供大家参考之用.具体如下: C#中利用GDI+绘制旋转文本的文字,网上有很多资料,基本都使用矩阵旋转的方式实现.但基本都只提及按点旋转,若要实现在矩形范围内旋转文本,资料较少.经过琢磨,可以将矩形内旋转转化为按点旋转,不过需要经过不少的计算过程.利用下面的类可以实现该功能. 具体实现代码如下: using System; using System.Collections.Generic; using System

[转]利用matlab绘制地图上的点、线、面

原文链接:https://blog.csdn.net/rumswell/article/details/16927565 一.绘制点 %生成背景地图地图 h = worldmap('France'); %读取和显示大陆架 landareas = shaperead('landareas.shp','UseGeoCoords', true); geoshow (landareas, 'FaceColor', [1 1 .5]); %埃菲尔铁塔的坐标 TowerLon = 2.28;%经度坐标 To

利用Quartz2D-contex绘制三角形

//获取上下文 CGContextRef context =UIGraphicsGetCurrentContext(); //线条加粗 CGContextSetLineWidth(context , 5); //设置背景颜色    [[UIColor grayColor]set];    UIRectFill([self bounds]);    //利用path进行绘制三角形    //标记    CGContextBeginPath(context);    //设置起点    CGCont

利用canvas绘制图形

绘制图有很多种方法,可以借助flash实现,也可以使用SVG和VML来绘图.本章将要学习一种新的绘图方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形,也可以实现动画.它方便了使用Javascript脚本的前端开发人员,寥寥的竖行代码,就可以在Canvas元素中实现各种图形及动画.本章将介绍如何使用Canvas元素来绘制一些简单的图形.本章主要知识点如下:·认识Canvas元素·使用Canvas绘图·Canvas与JavaScript之间的互动·利

利用Visio绘制数据流图与组织结构图

绘制数据流图: 利用Visio 2007来绘制网上书店系统的数据流图.利用Visio 2007创建Gane- Sarson数据流图,可以选择"软件和数据库"模板,然后再选择"数据流模型图",创建之后可以看到Gane-Sarson有4种基本符号,如下图所示. 在绘制系统数据流图的过程中,结构化需求分析方法通常强调"自顶向下,逐层分析"的思想.对于大规模的软件系统而言,需要采用多层的数据流图才能将问题描述清楚,而对于中等规模或小型的软件系统而言,采用