近日在做数据结构课程设计,题目是公交线路上优化路径的查询。图形方面需要实现可视化的地图,同时最好能够实现缩放与拖动。经过一番折腾后大致实现了此功能,方法并不困难,在此提供一下方法,给没有好想法或在高端技术实现上遇到困难的童鞋们一点思维的启迪。
首先,我们需要一个大的Layer,这个Layer用来绘制所有的地图元素信息,包括公交线路、站点图标、导航、背景图等等;
接着,我们要在这个大的Layer中使用addChild方法添加几个小的Layer,用来专门绘制不同的元素(主要目的是方便管理);
当然,Cocos2d-x中提供了DrawNode类,我们也可以添加多个DrawNode对象分别绘制不同元素而不是添加多个Layer,具体实现岁自己喜欢;
当实现了大Layer中各种绘图后,我们需要把这个大的Layer实例化对象后,放入Scene中的一个ScrollView(ui/UIScrollView.h)中即可,当然ScrollView要设置裁剪、垂直水平滑动及回弹效果(也是随自己喜欢),记得使用ScrollView的setInnerContainerSize(layer->getContentSize());确保ScrollView组建能够通过滑动查看到layer的每个角落(在缩放后也要记得调用此方法实时更新容器大小哦)。
到这一步其实我们已经可以达到地图的拖动效果了,接下来实现地图的缩放。博主折腾了一下午的手势缩放发现传递不能......可能是自己项目设计的锅(项目:这锅我不背),采用了Slider滑动条实现了地图缩放。当要实现地图缩放时,只需要在layer来看的父节点(或者只要不在layer内部调用即可?)内调用layer->setScale(6.66f);即可,此时layer内部多个层上的元素都会跟随layer的缩放而缩放。
至此,我们的自定义地图就完全实现了缩放与拖动。
转载请注明原地址。