【游戲客戶端】大話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 / 移動需要的幀數即可
?
? ? ? 好啦~~滾動基類的介紹大概就到這里,下一篇文章會介紹這個背景地圖的實現
? ? ? 感謝閱讀,記得點贊和關注!!!