当前位置: 首页 > news >正文

山东做网站建设公司电脑培训学校在哪里

山东做网站建设公司,电脑培训学校在哪里,建站行业有前途,福永营销型网站多少钱【游戏客户端】大话slg玩法架构(二)背景地图 大家好,我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法 PS:和之前…

 【游戏客户端】大话slg玩法架构(二)背景地图

      大家好,我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法

       PS:和之前一样,本文也只是分享实现思路,并不会贴具体的代码和资源哟

 (一)架构总览

      SLG玩法的实现思路可以划分为四个部分,分别是滚动容器基类的搭建,背景大地图的实现,建筑的生成与刷新,以及玩法优化预加载相关

      上一篇文章我们分享了滚动基类的实现:【游戏客户端】大话slg玩法架构(一)滚动基类 ,现在我们接着分享背景地图的实现逻辑

(二)背景地图的实现

(1)大地图资源的输出方式

      通过上一篇文章我们知道,我们需要一张大图来铺满滚动容器的InnerContainer来实现背景地图的效果。那这个时候怎么输出这个资源成了一个需要考量的地方

      直接输出一个10000 * 10000的png吗?那加载的时候不得卡鼠。所以必须要采取分块的方式,比如你可以把一块地图的大小设置成1000 * 1000,那么我们就把一张大地图分成了100张小地图

      第二个问题就是,那这个原始的10000*10000分块前的资源要怎么输出,如果单靠美术同学去画一张完整的图工作量是很大的,这个时候我们就可以采取代码重复拼接的方式,比如美术只输出2000 * 2000 (4块资源)组成的地图,我们在代码里每隔2000像素就重复利用一次资源

function getBgRes(Idx, Idy)local ResTbl = {[1] = {[1] = 资源1, [2] = 资源2},[2] = {[1] = 资源3, [2] = 资源4},       }local ResX = Idx % 2 + 1local ResY = Idy % 2 + 1return ResTbl[ResX][ResY]
end

    只要处理好资源拼接时候的缝隙,那么我们一方面可以降低大地图的实现成本,另一方面可以减少资源的读取,降低资源缓存

(2)地图块的控件复用

      有了地图的生成方式,后面只需要像摆积木一样一块块摆在滚动容器上就可以了。那么不知道面对这100个地图块,大家会选择怎么创建呢?

      如果直接一个for循环,那么一进游戏就卡成ppt了。有经验的同学可能会采取异步加载的方式分帧去创建,这样确实可以,但是100个地图块生成完之后,光这些地图就已经占据了几百M内存(苹果2G内存瑟瑟发抖)

      而且,哪怕是采取了异步创建的方法,在创建的流程中也是感受到明显卡顿的。其实玩家能看到的无非就是屏幕上那几块地图,哪怕玩家快速的上下左右滑动,我们也只需要多生成一屏的地图就可以了,这样不过十来块的数量。因此我们不需要把100个地图全生成,只需要生成十来个实际用到的,然后监听玩家的滑动,更新当前所视范围地图的纹理并重设它们的位置就可以了

-- 释放
for x = 1, 10 dofor y = 1, 10 dolocal IsInView = 判断一下这一块地图需不需要显示if not IsInView and self.Map[x][y] thenlocal Map = self.Map[x][y]Map:setFree()self.Map[x][y] = nilendend
end-- 生成
for x = 1, 10 dofor y = 1, 10 dolocal IsInView = 判断一下这一块地图需不需要显示if IsInView thenif self.Map[x][y] then-- 存在这个地块就设置可视就行local Map = self.Map[x][y]Map:setVisible(true)else-- 不存在则找一个空闲的地块控件重设信息local Map = getFreeMap()self.Map[x][y] = Map Map:resetInfo(x, y)endendend
end

 

(3)更新地图块的时机

      那什么时候执行这段地图更新代码呢?一开始我是直接每一帧都做一个判断,后来发现这样很多余而且比较耗CPU,其实我们需要监听玩家的滑动操作,滑动距离超过一个地图块的长/高的时候再执行就可以了

	self.SV.OnScrolling  = function()local CurPos = 获取当前位置if not self.SV.LastPosX or not  self.SV.LastPosY thenself.SV.LastPosX = CurPos.Idxself.SV.LastPosY = CurPos.Idyendif 超过滑动距离 thenself.SV.LastPosX = CurPos.Idxself.SV.LastPosY = CurPos.Idy执行更新地图的方法endend

 

      好啦~~地图块的生成介绍大概就到这里,下一篇文章会介绍这个建筑控件的实现

      感谢阅读,记得点赞和关注!!!

http://www.ritt.cn/news/15569.html

相关文章:

  • 网站后台管理系统免费下载南京网络优化培训
  • markdown做网站模板经典模板网站建设
  • 万网速成网站有哪些 功能短视频关键词seo优化
  • 厚街镇网站仿做网站建设哪家好公司
  • 深圳开发网站开发seo关键字优化
  • 网站建设的专业知识郑州厉害的seo优化顾问
  • 如何建立自己网站肇庆seo
  • 武汉学做网站搜索引擎优化的流程是什么
  • 坪山网站建设哪家便宜百度一下电脑版首页
  • 医院做网站今日竞彩足球最新比赛结果查询
  • 台州seo网站推广费用seo网络推广专员
  • 国外免费顶级域名爱站网seo工具
  • 网站建设论文 网站建设论文seo工作室
  • 毕业设计网站建设杭州网站搜索排名
  • 网站建设管理员角色设置百度平台推广联系方式
  • 做外卖系统哪家网站做的好武汉网站推广公司排名
  • jq网站特效插件下载深圳推广公司排行榜
  • 做互动电影的网站seo超级外链
  • 企业网站开发工资重庆黄埔seo整站优化
  • 企业网站的建设哪个好百度seo推广计划类型包括
  • 网站建设低价建站损失在哪里新冠咳嗽怎么办
  • 广州网站建设外包营销宣传策划方案
  • 软件开发培训机构电话seo还有哪些方面的优化
  • 杭州seo整站优化优化排名 生客seo
  • 网站建设和开发百度电话怎么转人工客服
  • 制作商城网站模板亚马逊关键词优化怎么做
  • 做公众号的网站海外营销推广服务
  • 百科创建seo 是什么
  • 网站建设空间什么意思菏泽地网站seo
  • 没有网站也可以做cpa百度平台商家联系方式