18年年初,跳到了现在的公司,在刚进来时,CTO跟我们讲了要做的游戏类型,2D地图,3D人物(虽然后来又变成3D场景),固定视角的摄像机,随后做地图这个活落到了我身上。
过程怎么想的我忘了,过去的时间有点远,现在只是记录整理一下。因为我想BB的细一点,所以会分为几篇。
先说一下我的思路,我是把世界坐标0,0放在左上角,然后通过循环加载贴图,当然,贴图的大小是固定的,1024*1024,然后把贴图放入
因为主程带来的框架,所以我用ngui的uitexture来做的2D地图。下面粘贴lua代码:
function show(self,posMap)
self:setMapShowRegion()
local posX = posMap.x * self.posScale
local posY = -posMap.y * self.posScale
local left = math.floor((posX - self.screenW/2)/self.cellWide-0.5)
local top = math.floor((posY - self.screenH/2)/self.cellHigh-0.5)
local right = math.floor((posX + self.screenW/2)/self.cellWide+0.5)
local buttom = math.floor((posY + self.screenH/2)/self.cellHigh+0.5)
self.mapCountW = right - left + 1
self.mapCountH = buttom - top + 1
self.mapCount = self.mapCountW*self.mapCountH
self.forMinY = top
self.forMinX = left
MapTitle.getInstance():getStartPos(Vector3(self.forMinX,self.forMinY,posMap.z),posMap)
for i=self.forMinY,buttom,1 do
for j=self.forMinX,right,1 do
self:loadMapTexture(j,i)
end
end
end
写了show方法作为2D地图加载的入口方法,通过传入的鼠标点击世界坐标来作为地图加载的中心点,根据
屏幕的大小Screen.width和Screen.height来算出在屏幕的左、右、上、下边缘分别所在的格子数(因为服务器那边是根据格子数来算像素坐标的),在这里我做了一个小技巧,就是当摄像机边缘在一块地图大于等于0.5时,显示往外延伸的下一块地图块,小于0.5时就显示自己这一块