觸動精靈腳本框架LUA

使用這個框架是為了解決以下問題:

1、更高效率開發(fā)

2、更專注于流程控制


我們來說下框架。


框架的意義:

框架的意義在于讓開發(fā)人員減輕重新建立解決復(fù)雜問題方案的負(fù)擔(dān)和精力。便于敏捷開發(fā)出新的需求浑塞,降低開發(fā)時間成本。


腳本的需求:

1政己、復(fù)用性內(nèi)容的通用設(shè)計

2酌壕、腳本流程的通用設(shè)計

3、業(yè)務(wù)邏輯流程的通用設(shè)計


一.我們來寫一個簡單的復(fù)用性內(nèi)容的通用設(shè)計的代碼

其包含模塊:

1歇由、多平臺的基礎(chǔ)庫函數(shù)文件的引用

2卵牍、多分辨率點陣文件的引用



創(chuàng)建文件 Factory_Base.lua 內(nèi)容如下


[mw_shl_code=cpp,true]function _BaseInit(ToolsType)

local ToolsType = ToolsType or "TS";

if ToolsType == "TS" then

require "Base_TS"; --觸動精靈基本函數(shù)封裝庫

elseif ToolsType == "XXXX" then

require "Base_XXXX"; --其他平臺基本函數(shù)封裝庫,這里僅作演示沦泌,各位可以自行命名和添加文件

end

end[/mw_shl_code]


創(chuàng)建文件 Base_TS.lua 內(nèi)容如下


[mw_shl_code=cpp,true]function _getColor()....end

function _log()....end

function _getScreenSize()....end

function ......

該文件封裝觸動提供的所有函數(shù)

如有其他平臺則同上封裝即可.[/mw_shl_code]


創(chuàng)建文件 Factory_PointColor.lua 內(nèi)容如下


[mw_shl_code=cpp,true]function _PointColorInit(ToolsType)

_BaseInit(ToolsType); --需引用基礎(chǔ)函數(shù)庫.

Width,Height = _getScreenSize();

if Width == XXXX and Height == XXXX then

引用指定分辨率下的點陣庫

end

end[/mw_shl_code]


本帖隱藏的內(nèi)容

二糊昙、設(shè)計腳本流程的通用內(nèi)容

1、腳本通用數(shù)據(jù)[針對游戲]

2谢谦、多帳號释牺,多區(qū),多角色的自動管控


默認(rèn)文件 main.lua 添加內(nèi)容如下


[mw_shl_code=cpp,true]GameData =

{

["帳號"]= --這里放置多帳號配置

{

["列表"]={},

["序號"]=1,

},

["服務(wù)器"]={ --這里放置多區(qū)配置

["列表"]={},

["序號"]=1,

},

["角色"]={

["數(shù)量"]=nil, --這里在拿到UI設(shè)置之后,將該數(shù)據(jù)替換成用戶選擇角色數(shù)量

["序號"]=0, --角色序號默認(rèn)為0,方便切換函數(shù)控制

},


["流程"]={

["任務(wù)流程"]=false,

["其他流程"]=false, --在這里添加其他流程..如所有任務(wù)完成后做什么做什么..比如買藥,比如掛機

["換角色流程"]=false, --當(dāng)所有流程跑完,切換到

},

["任務(wù)"]={

["列表"]=nil, --這里將用戶選項替換在這里..格式為: 主線,支線,師門,跑馬? 等任務(wù)..

["循環(huán)卡點"]=false,

["序號"]=1,

["數(shù)據(jù)"]={

["主線"]={

["點陣"]= t_TaskPoint["主線"], --對應(yīng)在點陣文件內(nèi)容.內(nèi)容如下


t_TaskPoint =

{

["主線"] =

{

["主點陣"]={點陣},

["主卡點點陣"]={點陣},

["主完成點陣"]={點陣},

["主引導(dǎo)點陣"]={點陣},

["次點陣"]={點陣},

["次完成點陣"]={點陣},

["次卡點點陣"]={點陣},

["次引導(dǎo)點陣"]={點陣},

},

--每個任務(wù)都對應(yīng)主線一樣設(shè)置回挽,如任務(wù)會在多個面板出現(xiàn),則添加次1點陣没咙,次2點陣 即可..

}


["前置任務(wù)"]=t_rontTask[taskArr[var]], --前置任務(wù)的意義在于起號過程中避免無意義的任務(wù)匹配,例如征途的20級以前不會有種植養(yǎng)殖千劈,25 級之前不會有王城運鏢祭刚,則王城運鏢的前置任務(wù)是種植養(yǎng)殖,當(dāng)匹配王城運鏢任務(wù)時墙牌,判斷其前置任務(wù)[種植養(yǎng)殖]未完成,則直接跳過王城運鏢匹配..

["主點陣識別狀態(tài)"]=nil,

["次點陣識別狀態(tài)"]=nil,

["任務(wù)完成狀態(tài)"]=false,

["死亡次數(shù)"]=0,

["限制死亡次數(shù)"]=0,

["飛鞋次數(shù)"]=0,

["限制飛鞋次數(shù)"]=0,

},

},

},

}



--在本函數(shù)中涡驮,將所有任務(wù)的數(shù)據(jù)全部重置 , 方便切換角色的時候重置數(shù)據(jù)

function _TaskInit()

任務(wù).循環(huán)卡點 = false;

任務(wù).主線.死亡次數(shù) = false;

任務(wù).主線.飛鞋次數(shù) = false;

任務(wù).主線.任務(wù)完成狀態(tài) = false;

--其他任務(wù)設(shè)置

任務(wù).其他任務(wù).數(shù)據(jù) = false;

end


--通過本函數(shù)來控制 角色 服務(wù)器 帳號 的切換

--備注 本函數(shù)在完成所有流程后切換到游戲的登錄界面時運行

function _InitServerAccountRoleIndex()

--進入設(shè)定帳號,服務(wù)器,角色 流程!

--當(dāng)前角色序號:GameData.角色.序號

--當(dāng)前服務(wù)器序號:GameData.服務(wù)器.序號

--當(dāng)前帳號序號:GameData.帳號.序號


GameData.角色.序號 = GameData.角色.序號 + 1;


--在這里將其他流程先打死. 切換到換角色流程

GameData.流程.任務(wù)流程 = false;

GameData.流程.其他流程 = false;

GameData.流程.換角色流程 = true;


--先判斷當(dāng)前角色序號是否超過用戶設(shè)定數(shù)量,如果超過數(shù)量則更換區(qū)喜滨,如未超過數(shù)量則更換角色

if GameData.角色.序號 > tonumber( GameData.角色.數(shù)量 ) then


--判斷當(dāng)前帳號所需要跑的區(qū)是否已經(jīng)跑完..如果跑完了, 則更換帳號, 如果沒跑完 則換區(qū)

if GameData.服務(wù)器.序號 >= #GameData.服務(wù)器.列表 then


--判斷當(dāng)前帳號是否已經(jīng)跑到列表中最后一個帳號捉捅,如果是的話則所有帳號均已完成.,否則則切換到下一個帳號

if GameData.帳號.序號 >= #GameData.帳號.列表 then

dialog("所有帳號任務(wù)已完成鸿市!", 10);

pressHomeKey(0); --按下 Home 鍵

pressHomeKey(1); --抬起 Home 鍵

else

--進入設(shè)定帳號流程! 當(dāng)前帳號:GameData.帳號.序號

GameData.帳號.序號 = GameData.帳號.序號 + 1;

GameData.角色.序號 = 1;

GameData.服務(wù)器.序號 = 1;

end

else

--進入設(shè)定服務(wù)器流程! 當(dāng)前服務(wù)器:GameData.服務(wù)器.序號

GameData.服務(wù)器.序號 = GameData.服務(wù)器.序號 + 1;

GameData.角色.序號 = 1;

end

end

end


--切換任務(wù)流程

function _GetDailyTask()

--當(dāng)前任務(wù):GameData.任務(wù).列表[GameData.任務(wù).序號] 切換任務(wù)

GameData.任務(wù).序號 = GameData.任務(wù).序號 + 1;

if #GameData.任務(wù).列表 <= 1 then

_LogLua("無可選任務(wù),設(shè)定任務(wù)流程結(jié)束!");

GameData.流程.任務(wù) = false;

return;

end

if GameData.任務(wù).序號 > #GameData.任務(wù).列表 then

if GameData.任務(wù).循環(huán)卡點 == true then

_LogLua("循環(huán)任務(wù)完成,設(shè)定任務(wù)流程結(jié)束!");

GameData.流程.任務(wù) = false;

return;

else

GameData.任務(wù).循環(huán)卡點 = true;

GameData.任務(wù).序號 = 1;

end

end

::檢測任務(wù)::

for var = GameData.任務(wù).序號 , #GameData.任務(wù).列表 do

local taskItem = GameData.任務(wù).數(shù)據(jù)[GameData.任務(wù).列表[var]];

if taskItem.任務(wù)狀態(tài) == false then

local tempQZTask = taskItem.前置任務(wù);

if tempQZTask ~= nil and #tempQZTask > 0 then

local tampQZTaskResult = true;

for vat = 1,#tempQZTask do

if _CheckTableValue(GameData.任務(wù).列表,tempQZTask[vat]) == nil or taskItem.任務(wù)狀態(tài) == false then

tampQZTaskResult = false

end

end

if tampQZTaskResult then

GameData.任務(wù).序號 = var;

_LogLua("檢測到:"..GameData.任務(wù).列表[GameData.任務(wù).序號].." 任務(wù)前置任務(wù)已完成,切換至該任務(wù)!");

return;

end

else

GameData.任務(wù).序號 = var;

_LogLua("檢測到:"..GameData.任務(wù).列表[GameData.任務(wù).序號].." 任務(wù)未完成,切換該任務(wù)!");

return;

end

end

end

if GameData.任務(wù).循環(huán)卡點 == true then

_LogLua("循環(huán)任務(wù)完成,設(shè)定任務(wù)流程結(jié)束!");

GameData.流程.任務(wù) = false;

else

_LogLua("無任務(wù)可做,重新適配一環(huán)任務(wù)菜單!");

GameData.任務(wù).循環(huán)卡點 = true;

GameData.任務(wù).序號 = 1;

goto 檢測任務(wù);

end

end


--主任務(wù)流程

--備注: _FindUIByTable _FindUIScopeByTable 均為找色函數(shù) 理解英文意思即可!

function _TaskFlow()

--避免頻繁點擊模塊 begin

TaskTimeCurr = socket.gettime();

if TaskTimeLast == nil then

TaskTimeLast = TaskTimeCurr;

else

if (TaskTimeCurr - TaskTimeLast)*1000 > 3*1000 then

TaskTimeLast = TaskTimeCurr;

else

return;

end

end

--避免頻繁點擊模塊 end


--當(dāng)進度條锯梁,或者自動戰(zhàn)斗即碗、自動尋路中這些點陣被匹配到時阻塞任務(wù)流程

if _FindUIByTable(t_Task.阻塞任務(wù)) then--FindUIByTable為找色函數(shù)

mSleep(5*1000);

return;

end


if _FindUIByTable(t_Task.隊伍面板) then

_Click(t_Task.切換任務(wù)面板);

end


if _FindUIByTable(t_Task.任務(wù)面板) then


local currTaskName = GameData.任務(wù).列表[GameData.任務(wù).序號];

local currTaskDZ = t_Task[currTaskName];


GameData.任務(wù).數(shù)據(jù)[currTaskName].主面板識別 = false;

GameData.任務(wù).數(shù)據(jù)[currTaskName].次面板識別 = false;


if currTaskDZ.主卡點 ~= nil and _FindUIScopeByTable(currTaskDZ.主卡點,currTaskDZ.主面板范圍) then

_LogLua(currTaskName.." 卡點"); --_LogLua為日志函數(shù)..這里就不貼內(nèi)容了

_GetDailyTask();

return;

end

if currTaskDZ.主完成 ~= nil and _FindUIScopeByTableAndClick(currTaskDZ.主完成,currTaskDZ.主面板范圍) then

_LogLua(currTaskName.." 完成");

return;

end

if currTaskDZ.主面板 ~= nil and _FindUIScopeByTableAndClick(currTaskDZ.主面板,currTaskDZ.主面板范圍) then

_LogLua(currTaskName.." 執(zhí)行");

return;

End


--引導(dǎo)的判斷在其該任務(wù)的其他識別之后 其原因大家自己領(lǐng)悟

if currTaskDZ.主引導(dǎo) ~= nil and _FindUIScopeByTableAndClick(currTaskDZ.主引導(dǎo),currTaskDZ.主面板范圍) then

_LogLua(currTaskName.." 引導(dǎo)");

return;

end

end

--在這里添加次面板或者次1面板焰情、次2面板的識別狀態(tài)陌凳,同時在下面添加對應(yīng)的狀態(tài)判斷


if GameData.任務(wù).數(shù)據(jù)[currTaskName].主面板識別 == false and GameData.任務(wù).數(shù)據(jù)[currTaskName].次面板識別 == false then

_GetDailyTask(); --調(diào)用切換任務(wù)函數(shù)

end

end[/mw_shl_code]


寫到這里基本尾聲了,還有一些小細(xì)節(jié)大家自己寫即可内舟,大部分的游戲都可以通用這個流程合敦,直接復(fù)制即可!,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末验游,一起剝皮案震驚了整個濱河市充岛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕蝉,老刑警劉巖崔梗,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異垒在,居然都是意外死亡蒜魄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門场躯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谈为,“玉大人,你說我怎么就攤上這事踢关∩■辏” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵签舞,是天一觀的道長秕脓。 經(jīng)常有香客問我,道長儒搭,這世上最難降的妖魔是什么撒会? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮师妙,結(jié)果婚禮上诵肛,老公的妹妹穿的比我還像新娘。我一直安慰自己默穴,他們只是感情好怔檩,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓄诽,像睡著了一般薛训。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仑氛,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天乙埃,我揣著相機與錄音闸英,去河邊找鬼。 笑死介袜,一個胖子當(dāng)著我的面吹牛甫何,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播遇伞,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辙喂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸠珠?” 一聲冷哼從身側(cè)響起巍耗,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渐排,沒想到半個月后炬太,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡驯耻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年亲族,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吓歇。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡孽水,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出城看,到底是詐尸還是另有隱情女气,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布测柠,位于F島的核電站炼鞠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏轰胁。R本人自食惡果不足惜谒主,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赃阀。 院中可真熱鬧霎肯,春花似錦、人聲如沸榛斯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮俗。三九已至懂缕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間王凑,已是汗流浹背搪柑。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工聋丝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人工碾。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓弱睦,卻偏偏與公主長得像弛车,于是被迫代替她去往敵國和親滚婉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 13,797評論 0 38
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)端圈,斷路器,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 回到學(xué)生年代 找尋你那熟悉的背影 跑到教室座位 觸摸你曾留下的痕跡 可惜你已不在這里 陪我一起找回憶 留我一個人 ...
    墨爺哦閱讀 192評論 0 2
  • 前言: 在開發(fā)當(dāng)中,經(jīng)常會驗證用戶登錄狀態(tài)和獲取用戶信息仑嗅。如果每次都手動調(diào)用用戶信息查詢接口宴倍,會非常的繁瑣,而且代...
    熊峰的博客閱讀 512評論 0 1
  • 100多年前照相技術(shù)后仓技,繪畫等平面藝術(shù)遇到很大的挑戰(zhàn)鸵贬,攝影的人像的留存給原本依靠像繪畫的畫家生存遭到了困境。 幾十...
    春天雨1閱讀 253評論 2 1