【游戏客户端】大话slg玩法架构(二)背景地图
【游戏客户端】大话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
好啦~~地图块的生成介绍大概就到这里,下一篇文章会介绍这个建筑控件的实现
感谢阅读,记得点赞和关注!!!

相关文章:
【游戏客户端】大话slg玩法架构(二)背景地图
【游戏客户端】大话slg玩法架构(二)背景地图 大家好,我是Lampard家杰~~ 今天我们继续给大家分享SLG玩法的实现架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法 PS:和之前…...
git-工作场景
1. 远程分支为准 强制切换到远程分支并忽略本地未提交的修改 git fetch origin # 获取最新的远程分支信息 git reset --hard origin/feature_server_env_debug_20240604 # 强制切换到远程分支,并忽略本地修改 2. 切换分支 1. **查看所有分支:**…...
coco dataset标签数据结构(json文件)
COCO数据集现在有3种标注类型:object instances(目标实例), object keypoints(目标上的关键点), 和image captions(看图说话),使用json文件存储。 NameImagesLabelstrain linkhttp:…...
GaussDB关键技术原理:高性能(四)
GaussDB关键技术原理:高性能(三)从查询重写RBO、物理优化CBO、分布式优化器、布式执行框架、轻量全局事务管理GTM-lite等五方面对高性能关键技术进行了解读,本篇将从USTORE存储引擎、计划缓存计划技术、数据分区与分区剪枝、列式存…...
总结之企业微信(一)——创建外部群二维码,用户扫码入群
创建外部群 企微接口中没有直接通过服务端API接口创建外部群 可以通过jssdk创建外部群:引用jssdk调用会话接口wx.openEnterpriseChat https://work.weixin.qq.com/api/doc/90000/90136/90511 创建外部群二维码 需要通过企业微信的应用,并且配置客户联…...
透视数据治理:企业如何衡量数据治理的效果?
在企业运营中,各个业务部门的成功与否都是直观且易于量化的,像销售部门卖了多少产品又为企业带来多少盈利,这些都能用具体的数字来说话。但当谈到数据治理的成效时,许多企业与决策者却感到迷茫。 数据治理的重要性不言而喻&#…...
ERC20查询操作--获取ERC20 Token的余额
获取ERC20 Token的余额 https://blog.csdn.net/wypeng2010/article/details/81362562 通过REST查询 curl -X POST --data-binary {"jsonrpc":"2.0","method":"eth_call","params":[{"from": "0x954d1a58c7a…...
Linux运维:MySQL中间件代理服务器,mycat读写分离应用实验
Mycat适用的场景很丰富,以下是几个典型的应用场景: 1.单纯的读写分离,此时配置最为简单,支持读写分离,主从切换 2.分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片 3.多租户应…...
css文字自适应宽度动态出现省略号...
前言 在列表排行榜中通常会出现的一个需求:从左到右依次是名次、头像、昵称、徽标、分数。徽标可能会有多个或者没有徽标,徽标长度是动态的,昵称如果过长要随着有无徽标进行动态截断出现省略号。如下图布局所示(花里胡哨的底色是…...
边缘计算盒子_B100_Jetson Nano (aarch64)开发环境搭建
目录 一、刷机步骤1、搭建刷机环境2、进入刷机模式3、开始刷机 二、系统迁移到TF卡 或者 U盘1、迁移脚本2、提前插入U盘或者TF卡3、 开始迁移 三、搭建miniconda 环境1、下载安装 四、jetpack开发套件环境1、版本查看2、apt 更换国内源3、安装Jetson-stats管理工具 一、刷机步骤…...
【Superset】dashboard 自定义URL
URL设置 在发布仪表盘(dashboard)后,可以通过修改看板属性中的SLUG等,生成url 举例: http://localhost:8090/superset/dashboard/test/ 参数设置 以下 URL 参数可用于修改仪表板的呈现方式:此处参考了官…...
【Linux网络】IP协议{初识/报头/分片/网段划分/子网掩码/私网公网IP/认识网络世界/路由表}
文章目录 1.入门了解2.认识报头3.认识网段4.路由跳转相关指令路由 该文诸多理解参考文章:好文! 1.入门了解 用户需求:将我的数据可靠的跨网络从A主机送到B主机 传输层TCP:由各种方法(流量控制/超时重传/滑动窗口/拥塞…...
香蕉派BPI-Wifi6迷你路由器公开发售
Banana Pi BPI-Wifi6 Mini 公开发售。 Banana Pi BPI-Wifi6 Mini 开源路由器采用Triductor TR6560 TR5220 wifi SOC设计,是一款迷你尺寸的wifi6路由器解决方案。内置高性能双核ARM Cortec A9处理器用于WIFI报文转发或智能业务处理,内置高性能LSW和硬件N…...
WPF-控件样式设置
1、控件样式设置 1.1、内嵌式为相同控件设置样式 <Window.Resources><Style TargetType"Button"><Setter Property"Background" Value"Yellow"></Setter><Setter Property"Width" Value"60"&g…...
C++20中的指定初始化器(designated initializers)
指定初始化器(designated initializers, 指定初始值设定项)语法如下:C风格指定初始化器语法,初始化数据成员的一种便捷方式 T object { .des1 arg1, .des2 { arg2 } ... }; T object { .des1 arg1, .des2 { arg2 } ... }; 说明: 1.每个指…...
QT跨平台开发(windows、mac)中.pro文件设置
方法一: 在配置前面加上平台标识符的前缀 # windows win32:INCLUDEPATH F:/Dev/ffmpeg-4.3.2/include win32:LIBS -LF:/Dev/ffmpeg-4.3.2/lib \-lavcodec \-lavdevice \-lavfilter \-lavformat \-lavutil \-lpostproc \-lswscale \-lswresample# mac macx:INCLUD…...
wifi中的stream parser
在Wi-Fi系统中,流解析器(Stream Parser)的主要功能是将传输的数据流(bit stream)按照物理层(PHY)和媒体访问控制层(MAC)协议的要求进行分解和处理。这一步骤对于确保数据…...
GitHub网页打开慢的解决办法
有时候看资料絮叨github网页打不开,经百度后,发下下面的方法有效。 1)获取github官网ip 我们首先要获取github官网的ip地址,方法就是打开cmd,然后ping 找到github的地址:20.205.243.166 2)配…...
前端vue 实现取色板 的选择
大概就是这样的 一般的web端框架 都有自带的 的 比如 ant-design t-design 等 前端框架 都是带有这个的 如果遇到没有的我们可以自己尝试开发一下 简单 的 肯定比不上人家的 但是能用 能看 说的过去 我直接上代码了 其实这个取色板 就是一个input type 是color 的input …...
[leetcode]partition-list 分隔链表
. - 力扣(LeetCode) class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode *smlDummy new ListNode(0), *bigDummy new ListNode(0);ListNode *sml smlDummy, *big bigDummy;while (head ! nullptr) {if (head->val &l…...
MCP协议实战:构建AI智能体任务管理服务器与二次开发指南
1. 项目概述:一个为AI智能体“开眼”的MCP服务器最近在折腾AI智能体(Agent)开发的朋友,估计都绕不开一个词:MCP。全称是Model Context Protocol,你可以把它理解为给大模型(比如Claude、GPT-4&am…...
工程师实战:Windows 8工作站部署、驱动危机与专业工具兼容性全解析
1. 从工程师视角看Windows 8的喧嚣与真实2013年,当Windows 8带着那个被称为“Metro”的崭新界面横空出世时,整个科技圈,尤其是我们这些整天和硬件、设计工具打交道的工程师群体,几乎炸开了锅。媒体上充斥着两极分化的评价…...
【Nature期刊精准捕获术】:基于Perplexity语义图谱的跨学科文献溯源方法论(附2024最新验证数据集)
更多请点击: https://intelliparadigm.com 第一章:【Nature期刊精准捕获术】:基于Perplexity语义图谱的跨学科文献溯源方法论(附2024最新验证数据集) 传统关键词检索在跨学科高影响力期刊(如 Nature、Scie…...
淘宝商品详情 API 实现标题 / SKU / 主图批量采集
item_get_pro-获得淘宝商品详情高级版请求示例-- 请求示例 url 默认请求参数已经URL编码处理 curl -i "https://api-服务器.cn/taobao/item_get_pro/?key<您自己的apiKey>&secret<您自己的apiSecret>&num_iid678121631641"响应示例"num_ii…...
告别网盘限速烦恼!九大平台直链下载助手让你的文件下载飞起来
告别网盘限速烦恼!九大平台直链下载助手让你的文件下载飞起来 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘…...
Windows10系统V-rep安装避坑指南:从百度网盘资源到环境配置
1. 为什么选择V-rep以及准备工作 如果你是机器人学或仿真技术的初学者,V-rep(现更名为CoppeliaSim)绝对是一个值得尝试的仿真平台。它轻量级、跨平台,而且对硬件要求不高,特别适合在个人电脑上进行算法验证和教学演示…...
如何快速恢复加密压缩包密码:ArchivePasswordTestTool完整指南
如何快速恢复加密压缩包密码:ArchivePasswordTestTool完整指南 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾经遇到过…...
在Windows上安装Android应用:APK Installer让跨平台操作变得简单
在Windows上安装Android应用:APK Installer让跨平台操作变得简单 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想过在Windows电脑上直接运行Androi…...
软银携手DeltaX建储能基地,2027年量产应对AI算力电力挑战
软银与DeltaX合作:储能系统建设的新布局品玩5月12日消息,据The Elec报道,软银集团选定韩国初创公司DeltaX,负责在日本大阪建设数据中心储能系统(ESS)的开发与制造。双方计划于今年下半年在大阪堺市原夏普工…...
使用Nodejs和Taotoken为前端应用构建AI聊天后端
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Node.js和Taotoken为前端应用构建AI聊天后端 基础教程类,指导前端或全栈开发者使用Node.js环境接入Taotoken&#…...
