之前做过一个家园系统,今天和大家分享的是,关于在做家园系统的时候遇到的一些问题和当时的解决的方法。
遇到的几个问题:
1. 地图层问题。
(1)这些东西如何在场景中摆放:地面,围墙,小窝,人,未解锁区域等等。
(2)地图大小限制和地图最小单位的大小等因素。
(3)我们需要保存的数据有哪些。
当时的解决方法:
1)幻想的地图层,把地图分成好几块加载的。策划根据地图编辑器生成了对应的文件,底层加载地图的时候会加载这些地图。但是家园地图是一个全新的地图。而且不是地图编辑器编辑的。但是底层有不提供修改支持。因此原先那几块地图就用了空的文件进行修改。相当于进入这个场景的时候,是一个黑的世界。
2)地面,围墙,小窝,人,未解锁区域等,所有的家园场景的东西,我们通过不同的层加载到场景里。写了一个HomeMapDrawObject.lua 下面是它的初始化函数。
1 function HomeMapDrawObject:__init() 2 HomeMapDrawObject.number = HomeMapDrawObject.number + 1 3 self.core_pos = cc.vec2(0, 0) 4 5 --集合 6 self.coreNodes = {} 7 8 --保持对象应用,方可访问其成员方法 9 self.spriteLayers = {} 10 -- self.spriteLayers[cc.RenderQueue.GRQ_SHADOW] = {} 11 -- self.spriteLayers[cc.RenderQueue.GRQ_BUILD_AND_PLAYER] = {} 12 13 --草地 14 local gressNode = cc.Node:create() 15 self.coreNodes[HomeMapDrawObject.Layer.GRESS] = gressNode 16 HandleRenderUnit:GetCoreScene():addToRenderGroup(gressNode, cc.RenderQueue.GRQ_SHADOW) 17 18 --阴影 19 local shadowNode = cc.Node:create() 20 self.coreNodes[HomeMapDrawObject.Layer.SHOADOW] = shadowNode 21 HandleRenderUnit:GetCoreScene():addToRenderGroup(shadowNode, cc.RenderQueue.GRQ_SHADOW + 1) 22 23 --身体 24 local bodyNode = cc.Node:create() 25 self.coreNodes[HomeMapDrawObject.Layer.BODY] = bodyNode 26 HandleRenderUnit:GetCoreScene():addToRenderGroup(bodyNode, cc.RenderQueue.GRQ_BUILD_AND_PLAYER - 2) 27 28 --其他 29 local otherNode = cc.Node:create() 30 self.coreNodes[HomeMapDrawObject.Layer.OTHER] = otherNode 31 HandleRenderUnit:GetCoreScene():addToRenderGroup(otherNode, cc.RenderQueue.GRQ_BUILD_AND_PLAYER - 1) 32 33 end