我們在使用unity5.x開發的新遊戲《江湖x》中使用ulua做一些業務邏輯。
前期為了開發迅速,沒有使用wrap,使用的動態反射(所以很慢)。這兩天針對性優化,將lua wrap用了起來。發現乙個詭異現象:
在editor中跑得很正常的邏輯,在ios真機上整型都溢位了。
具體內容是我們在c#的乙個類中記錄了攻擊扣血(負數),傳到lua中後變成了乙個越界整數,結果直接變成給敵方加血了。。還是乙個巨大的整數,瞬間補滿,嚇死人 - -#經過排查以後發現,使用ulua生成的wrap 類中,只要有int型別的數,就不能為負數,否則在lua那邊取出來就是乙個溢位的整數。大概搜了一下,應該是跟ulua不支援int64相關,沒有仔細研究了。
沒辦法,於是我們就做了一件很醜的事情……
public
string addhpstr}
public
string addmpstr}
public
string addballstr}
public
string addhudunstr}
在lua中這樣呼叫……
local daddhp = tonumber(br.addhpstr)
local daddmp = tonumber(br.addmpstr)
local daddball = tonumber(br.addballstr)
local daddhudun = tonumber(br.addhudunstr)
雖然很醜。。但是問題貌似暫時解決了。
不知道是否有更優雅一點的解決方案?如果有,歡迎告訴我。
整數溢位,如何判斷整數溢位
c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...
整數溢位,如何判斷整數溢位
c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...
整數溢位,如何判斷整數溢位
c語言中存在兩類整數算術運算,有符號運算和無符號運算。在無符號運算裡,沒有了符號位,所以是沒有溢位的概念的。所有的無符號運算都是以2的n次方為模。如果算術運算子的乙個運算元是有符號書,另乙個是無符號數,那麼有符號數 會被轉換為無符號數 表示範圍小的總是被轉換為表示範圍大的 那麼溢位也不會發生。但是,...