地图编辑器走向与讨论(附大量源码)

9月我发布了一个黑小孩地图编辑器,虽然表面可以帮助ccc完成一些地图的编辑,但实际问题还是很多很多,原本之后我打算一个月一个版本的更新下去,但不断的实践之后,却令我大失所望。不仅是问题多,更重要的是原本提倡的灵活,也笨拙的要死。于是,我开始寻找原因,改变方向,不在追求它有多么强大惊艳的功能。而是希望黑小孩能稳定、舒畅、快捷与灵活。

很遗憾,这并不是发布贴,没有什么黑小孩地图编辑器0.8或1.0。但我会在这里发一些关于黑小孩地图编辑器新功能与走向,并希望大家能给予一些技术上的讨论与支持,让黑小孩地图编辑器下次再出现之时,能更成熟与稳定。并且这里我也会附上大量功能性的源码,对萌新来说应该可以吸收一些营养。

老样子:QQ:372852066 Q群:150968661

19赞

:14::14::14::14::14::14:顶一下…

前几天玩了一下页游的传奇,原本以为他应该和一些单机的RPG游戏地图原理一样,结果却惊艳到我了。正常来说当一个角色走到一个物体下面时,会调节层顺序,以及将物体半透明化,结果那个页游,反向将人物透明化了,还看着还挺合理的。。。

正常的

页游的

源码地址:https://pan.baidu.com/s/1pKPknYN

地图树做了和页游传奇一些的处理,其他的都正常,加了简单的碰撞。地图挺大的宽高12800*12800,就中间放了点东西,所以走走就行,不用非看到头,没东西的

3赞

以前做过地图时,发现图集素材中间带有透明的话,拼出的地图也会莫明的带有透明缝隙。但是不稳定,时而有时而又没了。不过经过这么几个月的版本,似乎终于稳定一些,变的经常有了。

于是我找了一圈论坛,发现解决办法都没用之后,为地图加了修正属性,但是很不爽的是修正属性会为所有的图块多添加一像素的距离,所以官方要是有时间的话,可以把下面的案例下下来,看看是我哪里弄错了,还是什么原因。

2D地图(素材来源打造世界):

源码地址:https://pan.baidu.com/s/1kUUIkBX

在属性检查器上,将revise属性点掉就会取消修正

1赞

这个可以完全开一个教程帖了~~ 期待~~

角色半透明太容易做了,角色画了两次都是透明的,透明度一般为75%,分了两层,中间夹了场景物件层,没有物件两个透明角色叠加,看不出透明度,有物件层就被挡了一个
其实这是游戏黑科技,看上去复杂,实现很简单,这类黑科技很多很多

5赞

ccc做地图编辑器比u3d复杂非常多,我曾经做过一个三消游戏的编辑器,原理其实和这个差不多,甚至更复杂,实现是实现的,但是用起来特别不方便

用flash做

针对需求的复杂的关卡编辑器,本身就是一个不小的项目了

拼图带缝隙一个最大的可能是图片有损压缩造成的,用最高画质试试

2D地图编辑器,费脑啊

过去的一段时间,我开始以实践为主,找了很多RPG制作大师的素材,这种素材的图块很小,基本32*32为主。其中不少这样的素材。

都是6464的,正常分的话,以3232主。为分为上下左右四个,但是想将这种图形平铺扩展成任意宽高的话,基本不可能了。

于是,我想了个办法,将这个6464的图形,分出了9个3232的图块,即以16为单位,0到32一个,16到48一个,32到64一个。上中下各三个,平铺下来刚好九个,如果要比较的话,刚好是在原来四个图块的中间,插了五个图块。

因为一开始的设计,地形图层虽然可以改变地形,但是坐标是固定,也就是说图层是3232的地形,坐标也只能是32的倍数。于是上面分块的方法,正好是分成出九个3232的图块,平铺下去至少看上去,是可以勉强做到扩展的。因为很多图块之间,是有重合,我加复选功能。并且用黑小孩分块时,我加了‘十’字分法,也就是上面的形状。

复选:

平铺扩展之后:

看着还可以,我一段时间也以为这种方法可以解决大多问题,但很快就知道错了。6464图形不够横也好,竖也好,都只能分出两个3232的图块,然而我却分出了三个,多出的那个32*32的图块,确定是多出来的,也就是重合的部分,如果不刻意,是不可能与其他边缘无缝连接的。其实上图就是,若细仔看的,每个图块样相接处,是有些不自然的。

其中,最重要的原因便是‘固定’,因为3232的地形,完美平铺下来,也应该全部都是3232的图块,所以坐标是无法改变。

唉,也是经过一系列的痛苦实践之后,我开始不在在意地形图层和对像图层的关系。所有地形图块,按ctrl+d可以一键变为自由图块,两者不冲突。地形仍然可以用刷子,魔术棒等工具。

于是再次分图块,就变成了这样:

在地形上刷出来后:

转为自由图块后,手动缝合:

这样一来,也就总算是舒服了,其实一开始的分块,也不能算是错,如果在设计游戏素材时,那样设计我觉得也挺好的。

1赞

一开始的概念是地形图层,用来设计地形。对像图层用来记录对像,不被地图数据绑定。但现在既然地形图层和对像图层的界线,已经不那么明显,于是,我取消了对像图层的概念。开发者如果想从地图中提取哪个Node,可以直接通api将该Node从地图中删除并提取出来。

之后,为了设计更方便。我参照了ps、flash为自由图块,添加快捷操作。

Shift+鼠标左键 扩选

Alt+鼠标左键 减选

Ctrl+鼠标左键 移动复制

顺便一提,传奇源码中的树挺大的,原本打算放一整棵进去,看看CCC性能怎么样,但是感觉太浪费时间,于是我就给分块了。其中传奇还有一些更大的素材,像房屋建筑、假山什么的。小的就有一千多的宽高,如果设计plist文件时,分成100左右的若干块,那么地图性能基本不用考虑,会很流畅。

至此,黑小孩所谓的灵活,终于有了很大的提升。刚开始的图层、图块自定义,加上自由图块的无限制,让拼地图对素材的要求,不在那么严格。而且更多的是,可以像设计软件那样,来完成各种不一样的东西。

随后便是另一个错误,在研究一些PRG素材时,一方面是理解不够,另一方面是其中的素材确实是比想像中的要碎的多,迫使我不得不用PS软件进行加工和删改。这就造成了我对很多素材的过于理想化,在设计软件之初,我一直认为素材设计,到分块,到合成地图,都是一条线完成的。其中不会有什么多余的问题。

但实际我自己实践操作的时候,错误的估计而让素材不和谐,或不得不重新分块的情况,多不胜数。而我又没提供更改素材与图块的功能,其中频繁的出错,让我不止一次感觉到无奈而又难受。

有问题,却无法更改。这肯定是我的错了。于是,我除了plist文件分块功能,开始追加plist文件更改功能,以及替换图片和更新图片的双功能。两者区别,替换图片只替换原本素材,plist文件不变,但要求替换的图片素材和原本素材宽高一致。更新图片会两者都更替换,过程会将plist文件中的图块,进行全局替换和删除。

plist修改

利用替换图片功能,瞬间改变所有草地(因为更新图片功能演示太麻烦,所以算了)

3赞

我的膝盖呢

如果不分块,plist文件中,应该就只有一个图片的描述信息吧?
如果分100块,那么plist文件就有100块的描述信息,反而会更流畅?
不明求解。谢谢~

渲染优化,如果一个图片是10001000的,不分块的话,那么它就是一个10001000的整体,就算在场景中,它只出现一像素,引擎也会将他整个渲染出来。但是分成若干小块,那么哪一部分出现在舞台,引擎就会渲染哪一部分,这样最大限度减少了渲染的浪费,可以对游戏优化得到很大的提升。

如果引擎是工人,同样的钱,一个每次都要扛着百斤重的物体,一个只拿雇主有用的部分,这可能是一斤,也可能是十斤。那么他们谁先累死?

实际上一个手机屏幕才多大,真的是一个素材是1000*1000的,就算放到屏幕中间,都有好大一部分是不需要的。

再说一下你的误区,以下会针对我的黑小孩多一点。你的想法应该是这样的,如果一个素材不分块的话,那么渲染访问它一个就行了。但如果这个素材被分成了一百块,从一个对像变成了一百个对像,不仅渲染面积没变,而且访问消耗还多了99倍。

想法是没错,但建立在我和cocos什么都没做的情况下才成立。不管什么时候,不用的显示外对像清除掉,都不会错。一个很大的图形对像,如果无法将它不需要的部分清除掉,那么就在它身上毫无痕迹的划几刀,这样大家就都舒服。

再有就是对像的增加以及访问消耗的增加,这个就和我的算法有关了,如果舞台上最大需要100个node,那么之后其实都是这100个node在忙碌着,偶尔对像不够了,也是看实际实况增加几个。

大家各忙各的,忙完了你也不要拍拍屁股就走人,而是换身衣服去做另一件事。这样对像就会稳定在一个非常可观的量。

至于访问遍历的消耗,就更少了。

当一个地图向前移动时,实际需要访问和计算的,就是它前面需要增加的一排对像,和后面需要删除的一排显示对像。如果是向前上移动的话,就是前上和后下,四排显示对像。

比如舞台上有100个Node,那么大多时候,需要确定增删的Node为十到四十个。而且并不是每一像素都查访,如果地形是32像素的,那么就是每移动差不多32像素才检查一次,哪些需要增加,哪些需要删除。

我的那个传奇源码,地面图层是一万个node,如果将数量增至到五万,十万,一百万。那性能也不会有一点变化,这需要一些技巧。如果什么都不做,就和你想的一样了,当舞台有一百万个node就要遍历一百万次,而且每移动一像素都遍历,那可真是疯了。

一开始,我是打算把我做黑小孩的相关设计和经验,都分享出去,但我实在太忙、太多事要做了,光是写一些帖子和弄一些小源码,就让我自顾不暇。等过了这一段时期吧,我会将地图运行的原理,和一些地图场景设计的事,都分享出去。

6赞

真的是学习到好多知识。。。 赞楼主~~

用这个(黑小孩)编辑器做一些微信小游戏

百度云都挂了…期待补上 感谢楼主