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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

cocos2dx lua优化总结

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cocos2dx lua优化总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


近期游戲準備出安卓版本,在安卓上的性能表現不佳。經過一周多的優化,在性能上取得了較大的提升。游戲采用?Cocos2d-x 3.2 + Lua?進行開發,以下將在渲染效率,CPU效率,包大小等方面進行總結。


渲染效率

紋理格式 – 運行效率 內存 包大小

  • 所有的圖片都通過一個Python腳本(調用TexturePacker的命令行工具)自動轉換為RGBA4444編碼的格式。然后判斷當前平臺為安卓時,將默認紋理格式轉換為RGBA4444。

[cpp]?view plaincopy
  • --安卓啟用4444紋理??
  • if?targetPlatform?==?cc.PLATFORM_OS_ANDROID?then??
  • ????cc.Texture2D:setDefaultAlphaPixelFormat(cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A4444)??
  • end??
    • 以上的過程會發現一種比較”反?!钡默F象,就是轉成RGBA4444的圖片要比原來的圖片要大。所以在腳本中不能單純的轉換,需要對比轉換前后的大小,只轉換變得更小的圖片。

    • 還需要注意性能和表現的平衡。有些圖片轉成RGBA4444后看起來太糙,嚴重的影響了游戲的視覺體驗。對此需要小心的針對處理。處理方法為,在這些紋理使用前將默認紋理格式設置為RGBA8888,然后當紋理使用后再將設置為之前的默認紋理格式。


      左圖是沒有做處理的游戲截圖,可見相當不平滑的光線和背景。 右圖是只針對背景和光暈的紋理設為RGBA8888處理,視覺體驗一下子就回歸了。

    • 壓縮成RGBA4444格式的PNG圖片,還可以用pngquant工具進一步壓縮,而視覺體驗肉眼感受幾乎沒有變化。這樣可以進一步的減少包的大小。

    • RGBA4444的紋理內存使用量要比默認的RGBA8888小一半,所以可以很大的減輕游戲的內存壓力。而且和PVR ETC等壓縮紋理想比,可以一套代碼,完全兼容iOS和Android兩大移動平臺。所以我認為性價比還是很高的。

    紋理剪裁 – 內存 包大小

    • 游戲采用CocoStudio來制作骨骼動畫。CocoStudio導出的骨骼動畫導出的圖片默認是POT(power of two)大小的。其實會造成很多空白像素的浪費,這些空白像素不僅會讓圖片變大,還會增加紋理的內存。

    • 具體辦法是:將導出的POT圖片,經過美術或工具的剪裁掉多余的空白像素,使之變成NPOT(non power of two),然后修改一下plist文件中<texture>中的width和height值。對實際的使用是沒有任何影響的。

    • 通過把所有POT格式的圖片裁剪為NPOT,不僅可以縮減圖片的體積,還能減少紋理的內存占用。

    DrawCall OverDraw

    • 在同事對整個包進行DrawCall和OverDraw分析后發現,消除場景內還保留著天空背景。而這層背景實際是玩家看不到,因為它完全被消除場景擋住了。但是它會帶來全屏的繪制造成了全屏范圍的OverDraw,而且帶來了很多額外不必要的DrawCall。將其隱藏后,FPS在低端機上提升明顯。

    • 需要把這些看不到的東西全部隱藏或移除掉,否則它們會造成OverDraw和不必要的DrawCall,增加了GPU的負擔。

    • 隱藏的辦法,有些童鞋喜歡將其透明度設為0,但是這樣是不會降低DrawCall的。最好的方法是將其visble設為false。

    • 還有就是場景內有很多細碎的東西,如果它們都是一張張散圖儲存的話,會使DrawCall居高不下,從而可能導致FPS下降。why are draw calls expensive?

    • 解決辦法就是盡可能的將經常一起出現在屏幕上的小圖合并成一張大圖


    CPU計算

    • 避免在循環內做重復的運算。因為如果計算值在整個循環內都不會變的話,那么每次循環都去計算就是浪費CPU周期,應該將計算結果緩存在循環外部。

    • 想辦法避免開銷大的函數(如:開方函數,三角函數),尋找簡單運算的替代方案。如:距離的比較可以不用開方先求出距離,而是直接用平方運算進行比較即可。

    • 盡可能的避免同時多個的cc.RepeatForever。在低端機上發現在對較多對象調用cc.RepeatForever時,FPS下降顯著。原因可能是每幀帶來的計算,和因此頻繁觸發的Lua GC。GC是很一個十分耗費CPU的操作。

    • 優化算法,剪枝,去除冗余的計算。在游戲內的碰撞系統是這么進行優化的:原來對每一個球,會遍歷整個空間的碰撞體和墻壁進行碰撞檢測;優化后的算法是取球當前的坐標,轉換為格子坐標,然后取格子周邊6個格子內的碰撞體和墻壁進行碰撞檢測。效率提高了很多倍。

    • 避免頻繁的開辟內存,對象最好實現復用。開辟內存也是一項很耗費CPU的操作,尤其是在移動設備上內存緊張時。對象能重用盡量重用(建立對象池)。Lua內的表能初始化大小,盡量先初始化大小,否則rehash的操作很費時。如何編寫高性能的Lua代碼?

    • 用效率更高的庫來替換,比如用cJson來替換Lua json,用pugixml來替代tinyxml2。或者將效率低的模塊嘗試用更低級的語言進行重寫。

    • 出包時,關掉所有的print語句和cclog語句。你們都知道輸出到緩沖區的log有多卡。


    其他

    異步加載

    • 預測即將用到的紋理和資源,將其進行異步加載。這樣能在用到時,減少掉紋理加載的時間,感覺上會更流暢一些。

    移除不用的庫

    • 由于引擎使用的是Cocos2d-x 3.2版本,所以沒有3.3帶來的模塊精簡的功能。但是我們也可以自己去小心翼翼的移除掉游戲根本不會用到的模塊。比如:物理引擎,3d模塊,CocosBuilder spine等等。

    • 具體的方法是:通過adt的打包日志,分析有哪些庫被編譯進最終的so文件中,然后去項目內一個一個搜索這些庫的名稱。找到其對應的Android.mk文件,然后嘗試移除掉無用庫文件,然后嘗試編譯,確保游戲能正確運行。

    原文地址:http://wuzhiwei.net/opitimize_of_cocos2d-x_lua_game/

    近期游戲準備出安卓版本,在安卓上的性能表現不佳。經過一周多的優化,在性能上取得了較大的提升。游戲采用?Cocos2d-x 3.2 + Lua?進行開發,以下將在渲染效率,CPU效率,包大小等方面進行總結。


    渲染效率

    紋理格式 – 運行效率 內存 包大小

    • 所有的圖片都通過一個Python腳本(調用TexturePacker的命令行工具)自動轉換為RGBA4444編碼的格式。然后判斷當前平臺為安卓時,將默認紋理格式轉換為RGBA4444。

    [cpp]?view plaincopy
  • --安卓啟用4444紋理??
  • if?targetPlatform?==?cc.PLATFORM_OS_ANDROID?then??
  • ????cc.Texture2D:setDefaultAlphaPixelFormat(cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A4444)??
  • end??
    • 以上的過程會發現一種比較”反常”的現象,就是轉成RGBA4444的圖片要比原來的圖片要大。所以在腳本中不能單純的轉換,需要對比轉換前后的大小,只轉換變得更小的圖片。

    • 還需要注意性能和表現的平衡。有些圖片轉成RGBA4444后看起來太糙,嚴重的影響了游戲的視覺體驗。對此需要小心的針對處理。處理方法為,在這些紋理使用前將默認紋理格式設置為RGBA8888,然后當紋理使用后再將設置為之前的默認紋理格式。


      左圖是沒有做處理的游戲截圖,可見相當不平滑的光線和背景。 右圖是只針對背景和光暈的紋理設為RGBA8888處理,視覺體驗一下子就回歸了。

    • 壓縮成RGBA4444格式的PNG圖片,還可以用pngquant工具進一步壓縮,而視覺體驗肉眼感受幾乎沒有變化。這樣可以進一步的減少包的大小。

    • RGBA4444的紋理內存使用量要比默認的RGBA8888小一半,所以可以很大的減輕游戲的內存壓力。而且和PVR ETC等壓縮紋理想比,可以一套代碼,完全兼容iOS和Android兩大移動平臺。所以我認為性價比還是很高的。

    紋理剪裁 – 內存 包大小

    • 游戲采用CocoStudio來制作骨骼動畫。CocoStudio導出的骨骼動畫導出的圖片默認是POT(power of two)大小的。其實會造成很多空白像素的浪費,這些空白像素不僅會讓圖片變大,還會增加紋理的內存。

    • 具體辦法是:將導出的POT圖片,經過美術或工具的剪裁掉多余的空白像素,使之變成NPOT(non power of two),然后修改一下plist文件中<texture>中的width和height值。對實際的使用是沒有任何影響的。

    • 通過把所有POT格式的圖片裁剪為NPOT,不僅可以縮減圖片的體積,還能減少紋理的內存占用。

    DrawCall OverDraw

    • 在同事對整個包進行DrawCall和OverDraw分析后發現,消除場景內還保留著天空背景。而這層背景實際是玩家看不到,因為它完全被消除場景擋住了。但是它會帶來全屏的繪制造成了全屏范圍的OverDraw,而且帶來了很多額外不必要的DrawCall。將其隱藏后,FPS在低端機上提升明顯。

    • 需要把這些看不到的東西全部隱藏或移除掉,否則它們會造成OverDraw和不必要的DrawCall,增加了GPU的負擔。

    • 隱藏的辦法,有些童鞋喜歡將其透明度設為0,但是這樣是不會降低DrawCall的。最好的方法是將其visble設為false。

    • 還有就是場景內有很多細碎的東西,如果它們都是一張張散圖儲存的話,會使DrawCall居高不下,從而可能導致FPS下降。why are draw calls expensive?

    • 解決辦法就是盡可能的將經常一起出現在屏幕上的小圖合并成一張大圖


    CPU計算

    • 避免在循環內做重復的運算。因為如果計算值在整個循環內都不會變的話,那么每次循環都去計算就是浪費CPU周期,應該將計算結果緩存在循環外部。

    • 想辦法避免開銷大的函數(如:開方函數,三角函數),尋找簡單運算的替代方案。如:距離的比較可以不用開方先求出距離,而是直接用平方運算進行比較即可。

    • 盡可能的避免同時多個的cc.RepeatForever。在低端機上發現在對較多對象調用cc.RepeatForever時,FPS下降顯著。原因可能是每幀帶來的計算,和因此頻繁觸發的Lua GC。GC是很一個十分耗費CPU的操作。

    • 優化算法,剪枝,去除冗余的計算。在游戲內的碰撞系統是這么進行優化的:原來對每一個球,會遍歷整個空間的碰撞體和墻壁進行碰撞檢測;優化后的算法是取球當前的坐標,轉換為格子坐標,然后取格子周邊6個格子內的碰撞體和墻壁進行碰撞檢測。效率提高了很多倍。

    • 避免頻繁的開辟內存,對象最好實現復用。開辟內存也是一項很耗費CPU的操作,尤其是在移動設備上內存緊張時。對象能重用盡量重用(建立對象池)。Lua內的表能初始化大小,盡量先初始化大小,否則rehash的操作很費時。如何編寫高性能的Lua代碼?

    • 用效率更高的庫來替換,比如用cJson來替換Lua json,用pugixml來替代tinyxml2?;蛘邔⑿实偷哪K嘗試用更低級的語言進行重寫。

    • 出包時,關掉所有的print語句和cclog語句。你們都知道輸出到緩沖區的log有多卡。


    其他

    異步加載

    • 預測即將用到的紋理和資源,將其進行異步加載。這樣能在用到時,減少掉紋理加載的時間,感覺上會更流暢一些。

    移除不用的庫

    • 由于引擎使用的是Cocos2d-x 3.2版本,所以沒有3.3帶來的模塊精簡的功能。但是我們也可以自己去小心翼翼的移除掉游戲根本不會用到的模塊。比如:物理引擎,3d模塊,CocosBuilder spine等等。

    • 具體的方法是:通過adt的打包日志,分析有哪些庫被編譯進最終的so文件中,然后去項目內一個一個搜索這些庫的名稱。找到其對應的Android.mk文件,然后嘗試移除掉無用庫文件,然后嘗試編譯,確保游戲能正確運行。

    原文地址:http://wuzhiwei.net/opitimize_of_cocos2d-x_lua_game/

    總結

    以上是生活随笔為你收集整理的cocos2dx lua优化总结的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 日韩视频一区二区在线观看 | 97超碰在线播放 | www精品一区二区三区 | 欧美xxxx18 | 一区二区蜜桃 | 色播久久| 成人激情视频在线观看 | 我看黄色一级片 | 午夜激情视频网站 | 色福利在线 | 欧美国产另类 | 精品视频国产 | 亲嘴脱内衣内裤 | 精品国产综合区久久久久久 | 中文字幕一区二 | 日韩女同互慰一区二区 | 国产精品一二三区在线观看 | 午夜激情在线 | 日韩av成人 | 国产精品一区二区三区免费视频 | 91精品中文字幕 | 亚洲一区二区三区四区在线播放 | 男女www | 91亚洲精品一区二区乱码 | 麻豆蜜桃wwww精品无码 | 国产三级国产精品 | 国产剧情久久久 | 中文字字幕一区二区三区四区五区 | 在线播放精品视频 | 激情小说视频在线 | 闷骚老干部cao个爽 av九九九 | 日本三级免费看 | 91精品国产91久久久久久吃药 | 黄网av| 中国美女一级黄色片 | 欧美aaa在线观看 | 三级性生活视频 | 亚洲av毛片一区二二区三三区 | 少妇闺蜜换浪荡h肉辣文 | 无码人妻精品一区二区三区99日韩 | 国产又粗又长 | 亚洲爱爱片 | 女人脱下裤子让男人桶 | 亚洲色吧 | 亚洲成人av电影网站 | 成人性毛片 | 欧洲高潮三级做爰 | 自拍第一区 | 涩涩视频免费 | 人妻少妇精品无码专区二区 | 91精品国产综合久久久蜜臀图片 | 息与子五十路翔田千里 | 国产一区二区视频在线免费观看 | 女大学生的家政保姆初体验 | 色欲一区二区三区精品a片 在线观看黄网站 | 男人与雌性宠物交啪啪 | 奇米一区二区三区 | 日本乱偷中文字幕 | 天天天天天天天天干 | 色妞在线 | 一级片免费 | 欧美爽爽 | 亚洲天堂一区在线观看 | 国产乱人乱偷精品视频a人人澡 | 亚洲最大中文字幕 | 中文字幕乱码一二三区 | 天天操天天操天天操 | 人人射人人爱 | 琪琪秋霞午夜被窝电影网 | 好吊色视频一区二区三区 | 爆乳2把你榨干哦ova在线观看 | 一本大道一区二区 | 国产模特av私拍大尺度 | 午夜亚洲天堂 | 94av视频| av首页在线观看 | 在线视频观看国产 | 资源av| bt天堂av| 亚洲精品视频播放 | 性史性农村dvd毛片 日韩精品在线视频观看 | 亚洲视频国产精品 | 成人黄色电影网址 | 亚洲国产专区 | 成人欧美在线观看 | 娇妻之欲海泛舟无弹窗笔趣阁 | 美女黄色一级片 | 五十路息子 | 精品久久网 | 国产乱人乱精一区二视频国产精品 | 热久久久久久 | 亚洲第一免费播放区 | 蜜桃视频免费网站 | 91亚洲国产成人久久精品网站 | 羞羞免费视频 | 欧美另类在线视频 | 免费草逼视频 | 欧美黄色片视频 | 一区二区三区四区中文字幕 |