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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【F大说】Flash的那些坑

發布時間:2023/12/4 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【F大说】Flash的那些坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自F大的自言自語←_←


創建控件類時,基類不能用源碼

創建控件類時,基類要以swc方式提供(不能用源碼),否則控件中所包含的子元件實例名將被添加到基類,而不是控件類中去。

調用gotoAndStop會導致幀代碼插隊執行

不論調用哪個元件的gotoAndStop,都會導致當前腳本所在層級內的所有幀代碼(例如組件參數設置代碼)插在下一句代碼前執行,從而導致初始化順序錯亂,或報對象找不到的異常。

設置元件大小時,元件必須有內容

當元件內容為空時,設置其width和height,會導致scaleX和scaleY變成0。

控件子元件初始不能隱藏

控件的子元件初始不能設為隱藏,否則運行時會出現FlashPlayer莫名其妙退出的現象(不報異常)。

Chrome瀏覽器和其他瀏覽器對于字體名的識別不同

大多數瀏覽器(包括Flash獨立播放器)對于字體名是采用英文標識名的,比如宋體用的是SimSun,而Chrome瀏覽器采用的是字體原名,比如宋體就叫宋體。
這就導致FlashIDE里編輯好的文本框設備字體,在Chrome下會不認,以至于被Chrome的默認字體代替,從而導致顯示異常。
要解決這個問題,可以在AS里遍歷所有的文本框,強制矯正其字體格式,或統一用動態文本框設置htmlText,并在設置時多加一個<font?face="字體原名">的HTML標簽。

文本框的默認字體會受選中內容影響

當文本框有選中內容時(僅有個光標位置也一樣),defaultTextFormat屬性的值會變成選中內容結尾處之前那個字符的格式,而不是defaultTextFormat本來的值,只有當無選中內容時,defaultTextFormat才會變回本來的值。

非動態創建的文本框的默認字體在設置htmlText后會被重置

對于不是用代碼new?TextField創建的文本框(即在FlashIDE里添加的文本框),其defaultTextFormat屬性的值會在設置了htmlText后,被重置為FlashIDE里編輯的原始字體格式。
雖然大多數情況下這并不是什么問題(因為defaultTextFormat很少手動設置),但當在Chrome瀏覽器下播放時,就會因為Chrome瀏覽器不認文本框原始的英文字體標識名,而導致字體變成Chrome默認字體。
解決方案:在設置htmlText前,先設個替換字符,并調用setTextFormat(當前默認字體格式)還原被重置的默認字體格式,然后再把當前htmlText內容里的替換字符替換為新的內容,這樣就能保證最外層的字體格式仍然保持為當前的默認字體格式(而不是原始字體格式)。

文本框設置htmlText有時會末尾多一空行

將文本框的htmlText設置為不含末尾空行的值,末尾會多出一個空行。

文本框直接設置縮放比例會導致文本框大小和設備字體顯示不正常

設備字體獲取字符范圍也會受縮放比例的影響,導致和實際顯示的位置不符。

文本框htmlText對于標簽參數字符串中的特殊符號沒做轉義

一般只會在<a?href="...">中使用自定義的參數,但若參數字符串中包含"、<等HTML特殊字符,則設置給htmlText后(設置的內容中已轉義為&quot;等),文本框顯示效果是正常的,鏈接效果也對,但取文本框的htmlText值,卻會發現參數字符串中的特殊符號并非以轉義格式存在,這就會造成若將該htmlText賦值給其他文本框用,會因html解析錯誤而丟失內容。

uint變量賦負值會變成大正數,而不是0

實際上是先將負值轉為int類型,然后再強制類型轉換為uint。

多個swc中有相同的類會導致只有一個有效

尤其出現在swc是UI的時候,若兩個UI的swc中都有同樣的滾動條,則只有一個會編譯成功,另一個會編譯成普通的MC,并在運行時報類型轉換錯誤。

雙擊事件要把mouseChildren設為false時才有效

當包含子元件時,光設置doubleClickEnabled為true還不夠,則還需要把mouseChildren設為false,才會觸發雙擊事件。

內存回收不及時

確切的來說這個不算坑,只是Flash的內存回收既不是立即執行,也不是定時執行,而是當有新的內存分配申請,且當前剩余freeMemory不夠多時,才去執行一次。
并且此時執行的回收,也不是顯式調用System.gc()那樣進行完整的回收,而是只回收一部分,只要能滿足提供新的內存分配申請,就不再繼續回收了。
所以對于大量的內存用完后,最好顯式的調用一次System.gc(),這樣可以充分釋放掉這些已經分配了的內存。

定時器時間不準

Timer定時器的每兩個TIMER事件之間的時間間隔,并不等同于設定的時間間隔,而是取整數個內部時間片(時長受設定幀率影響,并不固定)后觸發。
事實上,Timer是在每次內部時間片處理時,檢測是否已超過時間間隔,超過則觸發一次TIMER事件,并重新開始計算間隔(并非累計,因此實際TIMER事件次數會少于理論次數)。

Release版和Debug版中,對于局部變量和成員變量同名的處理不同

var?value:int?=?value?+?1;?//假設this.value原先為5。
類似上述語句,在Debug版中,會被理解為var?value:int;?value?=?this.value?+?1,于是value會被賦值為6。
而在Release版中,會被理解為var?value:int;?value?=?value?+?1,于是value會被賦值為1。

重載MovieClip類的isPlaying屬性,會導致UI控件預覽看不見

只要UI控件里包含重載了MovieClip的isPlaying屬性的類,即使沒調用到,也會導致所有的UI控件預覽看不見,但實際運行卻是正常的。


轉載于:https://blog.51cto.com/cstar/1915904

總結

以上是生活随笔為你收集整理的【F大说】Flash的那些坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。