【游戏客户端】大话slg玩法架构(一)滚动基类
大家好,我是Lampard家杰~~ 今天我们兑现诺言,给大家分享SLG玩法的实现j架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法
PS:和之前一样,本文也只是分享实现思路,并不会贴具体的代码和资源哟
(一)架构总览
SLG玩法的实现思路可以划分为四个部分,分别是滚动容器基类的搭建,背景大地图的实现,建筑的生成与刷新,以及玩法优化预加载相关
OK,那么我们一步步开始与大家细细分享~~~
(二)滚动基类的实现
(1)scrollview滚动容器
首先和大家说明一下,这款SLG是一个纯界面玩法,策划大佬希望它可以像背包一样随时打开关闭,且不影响原先的游戏流程
因此在预演的时候我们有两套思路,第一是利用本身就自带滚动逻辑的scrollview实现滑动功能,然后把点击事件的监听放置在建筑上;第二是自己实现一个触摸层,滚动和点击的逻辑写在这个触摸层上,建筑仅作为显示用途
后面由于考虑到scrollview支持多方向滑动,且玩法本身的点击事件都是发生在与建筑交互的过程,因此我们采取了第一种做法
(2)尺寸与大小
关于这个容器有两个尺寸大小需要我们设置的,其一是显示的尺寸(也就是应用实机的分辨率),由于玩法需要铺满整个屏幕,因此我们需要对SV的尺寸通过setSize的接口来设置成实际的size
然后第二个就是InnerContainer的尺寸,此时肯定有部分同学不知道这InnerContainer是啥东西,遇事不决问GPT同学
Q : 什么是InnerContainer ?
A:在 Cocos2d-x 游戏引擎中,InnerContainer 是 ScrollView 控件的一个内部容器,用于容纳 ScrollView 中的子节点。ScrollView 是一个可滚动的视图容器,InnerContainer 则是这个滚动视图的内部容器,负责承载实际的滚动内容,并响应用户的滚动操作。
简单来说这个SV就好像一个望远镜,我们透过镜头可以看到前面有两棵树,而InnerContainer则是整片树林,我们可以通过调整镜头的位置来观看树林的全貌
那么这片树林究竟有多大呢?这取决于策划和美术大佬的设计啦,假设这是一个十行十列的大地图,一个地图的大小为1000像素,那么这个InnerContainer的大小就是10000 * 10000了
我们可以通过setInnerContainerSize的接口设置其大小
(3)跳转与滚动
那此时们需要实现跳转和滚动功能就很简单了,比如说我们想跳转到第二列第一行的地图块位置(2,1),按上述的地图尺寸假设值,那么只需要设置innerContainer的位置为(- 2 * 1000, - 1 * 1000)即可
为什么是负数呢?是因为SV实际是不动的,而0.0是innerContainer的左下角位置,因此我们SV“镜框”不动的情况下,想看右上方的内容,那只能让"树林“往坐下角移动了
因此我们就可以很简单的包装一个jumpTo接口实现跳转功能
-- 界面跳转至某一地图块
function jumpTo(Idx, Idy)
......
local PanelPosX = -Idx * 地块长度
local PanelPosY = -Idy * 地块高度
self.SV:getInnerContainer():setPosition(PanelPosX, PanelPosY)
......
end
而滚动就更简单了~~比如说需要从(1.1)滚动至(1. 2),我们掐指一算发现只需要把 innerContainer往左移动1000像素,那么我们就可以启用一个计时器,让innerContainer每帧移动1000 / 移动需要的帧数即可
好啦~~滚动基类的介绍大概就到这里,下一篇文章会介绍这个背景地图的实现
感谢阅读,记得点赞和关注!!!