日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高效、稳定开发功能的一些心得

發(fā)布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高效、稳定开发功能的一些心得 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在開始編碼前一定要足夠了解案子,了解各種特殊情況,和美術(shù)、策劃、服務(wù)器溝通好,最后寫好偽代碼。

一些建議

1.盡量復(fù)用,例如重復(fù)的對象單獨(dú)抽出來做成item,別的模塊也用到的做成通用item,不要寫重復(fù)代碼。

2.做功能前先考慮別人會不會用到,用到可能是什么情況,也可以詢問策劃,例如下面這個界面有7個業(yè)務(wù)用到,每個業(yè)務(wù)的需求都不太一樣。做的時候可以先考慮進(jìn)去。不然后面大概率還是在你的界面做修改,還得反工。

3.能配置的盡量走配置,特別是一些細(xì)微的差別,這個很重要。就比如上面的界面可以這么配置

DungeonsDefine.BattleType = enum {ARMY_DETAIL = 1, -- 軍團(tuán)詳情SLG = 2, -- 出征軍團(tuán)FORMATION = 3, -- slg校場編隊 GUARD_WALL = 4, -- 守城RPG_MONSTER = 5, -- RPG戰(zhàn)斗魔物 RPG_DUNGEONS = 6, -- RPG戰(zhàn)斗,副本RPG_ARENA = 7, -- RPG戰(zhàn)斗競技場ARMY_MONSTER_DETAIL = 8, -- 獵魔軍團(tuán)詳情 }local BattleType = DungeonsDefine.BattleType --isRpg:是否是rpg類型, rpg:顯示英雄技能、英雄類型 slg:顯示英雄軍團(tuán)技能,帶兵量 --isShowAdd:格子為空時是否顯示加號, true:顯示 --isSizerState:是否篩選英雄狀態(tài), true:正常狀態(tài)排在前,出征英雄排在后 --canSelectOutManor:是否可以選擇不再城內(nèi)英雄 true:可以(isSizerState 為true時才有用到) --isShowState:HeroFormationItem是否顯示英雄狀態(tài)圖標(biāo) true:顯示 --isNotFullTips:自定義英雄結(jié)束時,出戰(zhàn)英雄未滿是否需要提示, true:提示 您還可以選擇更多英雄,確定要繼續(xù)嗎 --autoClose:點(diǎn)確定自動關(guān)閉界面,默認(rèn)關(guān)閉--title:界面標(biāo)題,默認(rèn) 自定義英雄 --btnTxt按鈕文本,默認(rèn) 確定 --showHelp 是否顯示幫助按鈕 DungeonsDefine.BattleConfig = enum {[BattleType.ARMY_DETAIL] = {isRpg = false, isShowAdd = false, isSizerState = false, canSelectOutManor = true,isShowState = false, isNotFullTips = false, autoClose = true},[BattleType.ARMY_MONSTER_DETAIL] = {isRpg = true, isShowAdd = false, isSizerState = false, canSelectOutManor = true,isShowState = false, isNotFullTips = false, autoClose = true},[BattleType.SLG] = {isRpg = false, isShowAdd = true, isSizerState = true, canSelectOutManor = false,isShowState = true, isNotFullTips = false, autoClose = true},[BattleType.FORMATION] = {isRpg = false, isShowAdd = true, isSizerState = true, canSelectOutManor = true,isShowState = false, isNotFullTips = false, autoClose = true},[BattleType.GUARD_WALL] = {isRpg = false, isShowAdd = true, isSizerState = true, canSelectOutManor = true,isShowState = true, isNotFullTips = false, autoClose = true, title = "des_360", btnTxt = "des_618", showHelp = true},[BattleType.RPG_MONSTER] = {isRpg = true, isShowAdd = true, isSizerState = true, canSelectOutManor = false,isShowState = true, isNotFullTips = true, autoClose = true},[BattleType.RPG_DUNGEONS] = {isRpg = true, isShowAdd = true, isSizerState = true, canSelectOutManor = false,isShowState = true, isNotFullTips = true, autoClose = false},[BattleType.RPG_ARENA] = {isRpg = true, isShowAdd = true, isSizerState = false, canSelectOutManor = true,isShowState = false, isNotFullTips = true, autoClose = false}, }

4.每個功能盡量拆分成一小塊(每個小塊邏輯在30行以內(nèi)),定位bug比較方便,策劃改案子也比較方便實(shí)現(xiàn),只需要改對應(yīng)的小塊就好了。

?

詳細(xì)步驟

1.需求案:盡量對比競品,詳細(xì)的看3-4遍。

1-1.需要知道這個功能包括哪些界面。

1-2.策劃案是否有遺漏(考慮多種情況,例如有道具怎么展示,沒有道具怎么展示)。

1-3.比對競品,詢問策劃和競品不一致的地方。

1-4.如果有多語言,提前配置,方便拼界面時直接使用。

2.美術(shù)示意圖:

2-1.關(guān)注多語言是否超框,一般英語比較長。

2-2.比對案子,是否和案子一致,不一致要及時跟策劃溝通。是否有一些情況遺漏了。例如鍛造時顯示進(jìn)度條,不鍛造時顯示文本。

2-3.記錄需要用到的數(shù)據(jù)(服務(wù)端、配置讀取)

2-4.記錄所有的界面按鈕,知道按鈕的反應(yīng)事件(請求服務(wù)器、打開界面、修改界面邏輯如選中狀態(tài)、調(diào)用其他模塊如設(shè)置),額外關(guān)注需要請求服務(wù)端的按鈕,第四步定協(xié)議用得上。

3.比對服務(wù)端協(xié)議。例如

3-1.初始化需要數(shù)據(jù),例如主界面的小紅點(diǎn)。

3-2.需要同步的數(shù)據(jù),例如平叛會導(dǎo)致英雄狀態(tài)、經(jīng)驗(yàn)值、等級變化,那么都需要同步給英雄模塊。

3-3.請求類,基本都是按鈕觸發(fā),關(guān)注請求需要的數(shù)據(jù),服務(wù)端需要返回的數(shù)據(jù)。

4.拼界面,經(jīng)過上面三步,基本案子就很清楚了。

4-1.拆分界面,盡量拆分的細(xì)一點(diǎn),盡量把重復(fù)的對象拆分成一個item,例如AcquiredHeroItem。劃分后大概是下面這個樣子的。拆分規(guī)則為:子界面>子item>方法。

按方法劃分是指:每個方法負(fù)責(zé)一部分界面邏輯(例如替換該部分的圖片、文本,設(shè)置顯示隱藏等等)

4-2.界面適配,主要關(guān)注寬高比2:1的,4:3的,示意圖的比例三種。

4-2.關(guān)注多語言,盡量拉長、拉高文本框,因?yàn)橛⒄Z和阿語都比中文長很多。

導(dǎo)圖大概是這樣子的:

?5.寫數(shù)據(jù)類(邏輯類)

5-1.接受并保存服務(wù)端下發(fā)的數(shù)據(jù),對外提供獲取數(shù)據(jù)接口,例如

-- 獲取已獲得英雄 -- containRecruit 是否包含可招募英雄 -- 是否要排序 function HeroCtrl:GetAcquiredHero(containRecruit, sort)local heros = {}if containRecruit thenfor k,v in pairs(self._recruitData) dotable.insert(heros, v)endendfor k,v in pairs(self._heroData) dotable.insert(heros, v)endif sort thentable.sort(heros, HeroCtrl.SortHeroList)endreturn heros end

5-2.收到服務(wù)端數(shù)據(jù)后更新本地數(shù)據(jù),分發(fā)相對應(yīng)的事件通知業(yè)務(wù)更新界面(消息系統(tǒng)參考:https://www.cnblogs.com/wang-jin-fu/p/11255831.html)

5-3.請求服務(wù)端的接口,例如

--請求穿戴戰(zhàn)利品 function HeroCtrl:ReqDressBootyo(sort, pos)local data = {sort = sort, slotid = pos}NetMsg.SendMsg("reqherodressbooty", data) end

5-4.盡量將相同類型數(shù)據(jù)單獨(dú)分裝數(shù)據(jù)類,由該模塊的ctrl維護(hù)。例如每個英雄生成一個HeroData的數(shù)據(jù)類,該類對外提供所有業(yè)務(wù)需要的接口,例如獲取服務(wù)端數(shù)據(jù)和配置數(shù)據(jù)的接口。

5-5.邏輯計算盡量放在數(shù)據(jù)類里,例如是否顯示小紅點(diǎn),計算都在HeroData,業(yè)務(wù)只要通過返回值設(shè)置小紅點(diǎn)的顯示、隱藏就好了。

--計算小紅點(diǎn) function HeroData:ComputeHint()if self.own == HeroOwnState.RECRUIT thenreturn trueendlocal heroCtrl = PlayerTop:GetModule("HeroCtrl")if self:CanUpRank() and not heroCtrl:IsUpRank(self:GetHeroSort()) thenreturn trueendif self:CanUpQuality() and not heroCtrl:IsUpQuality(self:GetHeroSort()) thenreturn trueendfor i=1,#self.equip dolocal state = self.equip[i].stateif state == EquipState.CAN_DRESS or state == EquipState.COMPOSE thenreturn trueendendreturn false end

6.實(shí)現(xiàn)界面邏輯

這步就只是單純的填界面了,需要的數(shù)據(jù),數(shù)據(jù)類的獲取接口都寫好了。只要調(diào)用數(shù)據(jù)類獲取數(shù)據(jù)(文本內(nèi)容、圖片名字、顯示和隱藏),再把獲取的數(shù)據(jù)設(shè)置給對象就好了。

?

?最后,審案子、ui示意圖一定要仔細(xì)再仔細(xì),以為這個涉及到你后面的定服務(wù)端協(xié)議、界面拼接。邏輯理清楚了,拆分夠小塊了(也不能太小塊了,方法調(diào)用也是要消耗性能的,大概一塊的邏輯在10-30行左右),你的程序就不容易出邏輯bug,很更好維護(hù)、修改。

?

轉(zhuǎn)載于:https://www.cnblogs.com/wang-jin-fu/p/11305417.html

總結(jié)

以上是生活随笔為你收集整理的高效、稳定开发功能的一些心得的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。