lua遊戲開發易錯踩坑錄

2022-03-19 05:26:06 字數 2486 閱讀 6448

一。local

local函式一定要在呼叫之前定義(切記,不然會報錯或者不能呼叫該函式)

情況1:監聽調此函式後定義

base.model:addlistener("被監聽的函式", 監聽成功的**函式)

local function 監聽成功的**函式()

--處理

end

上面**執行遊戲將會報如下錯:

二。協程

停止協程前將協程中某變數或組建置空

使用協程做計時功能應注意

1.協程中用到的元件,變數等被置空前,應該將協程置空

2.置空協程之前應停止協程

3.為了確保同乙個協程同時只執行一次,可在協程開始前新增安全**:判斷改協程是否存在,存在則停止協程並將協程置空

實現方法:

local function setmytime()

--注意(3)

if this.countdown then

coroutine.stop(this.countdown)

this.countdown = nil

endthis.countdown = coroutine.start(function()

while true do

this.tm=this.tm-1--用到的變數

coroutine.wait(1)

endend)

end注意(2)

if this.countdown then

coroutine.stop(this.countdown)

--注意(1)

this.countdown = nil

end--假設此時需要對this.tm置空

this.tm=nil

三。判斷table表是否為空

確定表是否為空的最有效方式(即,當前不包含陣列樣式值或字典樣式值)

方法一:

if not next(mytable) then

-- table is empty

end

注意:這裡的#操作符不夠用,因為它只對錶中的陣列樣式值進行操作 - 因此#無法區分,#{}因為兩者都返回0.還要注意檢查表變數是否nil不夠,因為我不尋找零值,而是具有0個條目(即{})的**。

方法二:

if next(mytable) == nil then

-- mytable is empty

end

測試:

local mytable=

if not next(mytable) then

printlog("空表","shirln**********")

else

printlog("非空","shirln&&&&&&&&&&&")

endif next(mytable) == nil then

printlog("空表","shirln!!!!!!!!")

else

printlog("非空","shirln@@@@@@@@@@@")

end

輸出:

printlog("空表","shirln**********")

printlog("非空","shirln@@@@@@@@@@@")

可見,方法二比方法一更有效一些

如果需要顯示類似於"10%"這樣的字串,如果直接使用string.format("%s%",10)會報如下錯誤:

可以考慮把百分號"%"符號當成乙個值:string.format("%s%s",10,"%")

**如下:

function asset(path)

return asset:loadasset(path)

endutils.findimage(this.gameobject, "bg").sprite = asset(path)

錯誤:

原因:asset:loadasset載入的是任意資源,我們需要的是sprite資源

解決辦法:

function asset(path)

return loadsprite(path)

endutils.findimage(this.gameobject, "bg").sprite = asset(path)

web開發前端踩坑

1.inline block總會有間隙 前端布局對齊也可以使用float,但是這樣做會導致被作用塊不佔高度 相當於不存在,脫離了文件流,但是會顯示 前面的塊不佔高度後面跟著的不需要對齊的塊就可能會和前面的塊擠在一起 各種異常 float很好用,但是怎麼才能避免塊坍塌呢?1.在結束float的塊後面加...

thrift開發踩坑全紀錄

使用thrift搭建的系統已經穩定執行了一段時間了,該系統是公司的核心流式系統,高峰時qps在40萬。作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在搭建c 實現的thri...

樹莓派c 開發踩坑

這幾年用慣了高階語言,c 當年還是c99標準的,尋思這回用用c 最新的特性看看,比如在高階語言中的明顯降低耦合性的自定義事件,這是第乙個坑。首先想到的是個函式指標的巨集 typedef void eventfun eventtype,void 寫完之後發現只能用於靜態函式,看了看c 11特性裡面的 ...