「疑難雜症」又二記

2021-06-26 11:45:08 字數 2629 閱讀 9569

「疑難雜症」又二記

0. 引子

近來工作又遇到一些「疑難雜症」,在此簡單記下,自省省人 ~

1. 都是waitforseconds 惹的禍 ~

目前開發的遊戲很多地方都用到了hotween

,個人感覺還是挺不錯的(題外話,hotween

的第二版

dotween

應該也快正式release

hotween

的使用還挺順暢,不過小坑還是踩到了乙個:

對於一些連續的tween

效果,使用

hotween + yield return new waitforseconds

的組合方式個人感覺還是挺容易理解的,於是專案中的不少地方都出現了類似下面這種形式的**:

hotween.to();

yield return new waitforseconds();

hotween.to(...);

大部分情況下,上面的**都執行的很好,但是在極少數的情況下(真機測試下情況尤甚),會出現動畫(tween

)出錯的情況,而且極難重現,非常隨機,自己斷斷續續的查了好久,設想了不少可能原因,也依此做了不少

fix,心裡依然覺得惴惴不安,因為個中「病根」自己並沒有找到,後來又經過了不少測試才算找到了些門路,「順藤摸瓜」式的總算「確診」了**,原來這一切都是

waitforseconds

惹的禍 :)

自己大概學習過一些hotween

的實現原始碼,原理上來說還是挺傳統的,大概就是通過乙個

update

來不斷更新由

hotween.to

或者from

等api

產生的abstweencomponent

(hotween

中的tweener

,sequence

都繼承於他),當然個中細節很多,在此就不一一贅述了,值得一提的就是

hotween

在時間相關的邏輯上大抵都仰仗於

unity

中的time

,也就是說,如果拿上面的**舉例:

hotween.to();

其中動畫(tween

)的時間

duration

,hotween

大抵上便是由

time.time - tweenstarttime

這類形式來加以控制的,這種控制方式很直觀,一般來講也沒什麼問題,但是結合上

waitforseconds

就出岔子了……

問題出在waitforseconds

的計時方式與

hotween

的計時方式並不相同!(如何不同我並不十分清楚,有了解的朋友不妨告之一下)「天真的」猜測一下,我估摸著很有可能

waitforseconds

的計時要略快於

hotween

的計時,也就是說,如果

waitforseconds

顯示時間已經過去了1s,

hotween

這方可能仍然覺得時間只經過了

0.9s

……當然,實際程式執行中兩者的差距遠沒有如此誇張,但是不會一致基本上是肯定的,而當兩者的差距偶爾偏大,譬如說超過一幀時,「詭異」的動畫問題可能就會出現了,考慮上述**:

hotween.to();

yield return new waitforseconds();

// previous tweener could still running ……

hotween.to(...);

雖然你使用waitforseconds

等待了duration

時間,但實際上相對

hotween

而言,duration

時間還沒有到(感覺頗有些相對論的味道 :)),動畫仍然會在

yield

之後繼續執行,這與你**的邏輯假設是相悖的,自然就會出現或這或那的奇怪問題……

基於此,我改變了一下動畫的控制方式,**大概是這個樣子:

bool istweenend = false;

hotween.to();

while (!istweenend) {

yield return null;  

hotween.to(...);

此番改動之後,之前各種奇怪的動畫問題總算是「消停」了,呼……

2.wtf,

android

版本隨機崩潰!?

目前將遊戲發布了乙個android

測試版本,在

galaxy note

(android 4.1.1

)上跑的還算可以,但是放到紅公尺

note

(android 4.4.2

)上就各種崩潰(幾乎是「隨時隨地」

crash

),日誌上看大抵就是乙個段錯誤,實在是令人費解,幾番

google

、多方嘗試之後,才算找到了乙個

fix方案:

這裡有個細緻討論

(上面的截圖也來自於此),有興趣的朋友可以看看 :)

ok,就這些了 ~

Hadoop疑難雜症

前天安裝了pig,本來寫了條pig latin,但一直卡在 17 05 07 17 47 07 info mapreduce.job running job job 1494150363568 0001跑不通,想著肯定是mapredcue自身有問題,於是開始了艱苦的檢錯之旅,從csdn到stackf...

Appium疑難雜症

坑之初體驗 1.session大於60秒沒接收到命令自動關閉 python desired caps 在啟動配置裡面加入newcommandtimeout引數 desired caps newcommandtimeout 200 但是注意cnpm預設在當前目錄安裝npm包。3.uiautomatio...

疑難雜症 列舉

1.列舉是使用者自定義的整數型別 2.關於列舉的一般用法,參照 c 中的列舉 3.從字串中獲取列舉值 定義如下的列舉 public enum timeofday 從乙個字串得到列舉值,並轉換為整數 timeofday time timeofday enum.parse typeof timeofda...