地图居中小记

在游戏中经常用到地图居中的操作,比如一张大地图,需要做一个小地图来实时显示出玩家在大地图中的位置,这个做法比较常规的做法是对每一张大地图都等比例的来做一张小地图
获取到玩家在大地图中的位置,在根据缩放比例就可以算出来在小地图的位置了
下面这个算法是将玩家的位置始终处于屏幕的中心
初始化:小地图的原点与世界坐标重合,
如果想让小地图中某个点在屏幕居中,只需要用屏幕的中心点坐标去减当前点坐标,当然这个结果不可以超出范围,这个范围就是小地图的尺寸减去屏幕的尺寸
在这里插入图片描述

local mapWidth = GetMapWidthInPixel()
    local mapHeight = GetMapHeightInPixel()

    local worldPos = actor:getPosition()
    local worldX = worldPos.x
    local worldY = -worldPos.y
    local ratioX = self._minimapSize.width / mapWidth
    local ratioY = self._minimapSize.height / mapHeight

    local function calcMiniMap()
        local minimapX = worldX * -ratioX
        local minimapY = (mapHeight - worldY) * -ratioY
        minimapX = minimapX + self._limitSize.width / 2
        minimapY = minimapY + self._limitSize.height / 2
        minimapX = cc.clampf(minimapX, 0, -(self._minimapSize.width - self._limitSize.width))
        minimapY = cc.clampf(minimapY, 0, -(self._minimapSize.height - self._limitSize.height))
        self._quickUI.Image_minimap:setPosition({x = minimapX, y = minimapY})
        self._quickUI.Node_path:setPosition(self._quickUI.Image_minimap:getPosition())
        adjustPos(self._quickUI.Image_minimap)
        adjustPos(self._quickUI.Node_path)
    end

地图加载策略
在这里插入图片描述
地图结构:
由许多固定大小的格子组成,小个子的尺寸:(titleWidth,titleHeight)
假设横有m个格子,竖有n个格子,则一共有m*n个格子组成

地图位置:(mapX,mapY)—大小范围—>[(0,0),(m-1,n-1)]
世界坐标系的位置
wPositionx = titleWidthmapX
wPositiony = -titleHeight
mapY(这个值的正负需要视具体情况而定)

地图填充:
一张大的地图由n个固定大小的格子组成
titles:地皮,每一张地皮的纹理大小与小格子大小要一模一样
smtitles:层级介于obj和地皮之间的东西
objs:建筑,建筑虽是一张大图,但也都是由小格子拼凑而成,所以其纹理也都被拆分成一个个小格子纹理

玩家的移动:
玩家位置始终处于地图小格子的正中心
地图加载:
地图是庞大的,地图的位置是不变的,移动的是相机
每一次只加载在视野中的地图小格子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值