H5游戲開發面試經驗


參加了今日頭條的H5游戲開發面試 主要是以下問題

1、egret有幾種屏幕適配方案

  Egret 目前支持的模式有:showAllnoScalenoBorderexactFitfixedWidthfixedHeightfixedNarrowfixedWide

  詳細講參考 http://bbs.egret.com/thread-31286-1-1.html

2、常見的egret配置文件有哪些

  ①項目配置文件 egretProperties.json

  項目配置文件包含了項目編譯運行所需要的重要配制參數或選項:
  1.模塊配置modules:項目所需要的各個模塊
  2.原生打包設定native:適用於原生打包
  3.版本號egret_version:運行時的引擎版本,及最后打包是的引擎版本
  4.項目運行容器環境:總體分為(Html5環境和Runtime/Native環境)
    一般都會在launcher目錄
    Html5環境:需要egret_require.js和egret_loader.js做配合
    【index.html】:調試啟動頁面
    【release.html】:發布環境啟動頁面
    Runtime/Native環境:脫離HTML5環境,需要native_loader.js和native_require.js和runtime_loader.js做配合

  ②資源加載配置文件 default.res.json

  資源加載配置文件位於項目目錄的resource文件夾內,Egret項目在創建時已經包含該文件

  配置文件中的”resource”我們可以視為資源庫,當前游戲使用到的資源都可以放到這里

  ③主題配置文件 default.thm.json

  為指定的組件配置默認皮膚,全局指定一次即可,之后直接實例化組件,不再需要顯式設置組件的skinName屬性

  通常我們希望更新版本的時候避免被瀏覽器緩存,現在可以通過設置 EXML 版本號的方式來實現。

  ④清單文件 manifest.json 代碼清單

3、如何在egret中引用外部庫,外部庫是否參與打包

  外部庫是復制到lib下參與打包的

  1,首先在整個項目的外面建立一個第三方擴展庫的文件夾,然后將下載好的微信api的擴展庫粘貼到里面;

  2,在項目的egretProperties.json文件中配置,modules字段是用來配置擴展模塊和第三方庫的

  

  前提是,下載的微信api的庫文件內的后綴為json的文件里面的 name屬性的值和該json文件的名稱相同,如,都是weixinapi 則egretproperties.json屬性文件中如上圖所示的配置,,然后 重新編譯項目 egret build -e,編譯的同時則會看見項目左側的libs庫目錄下多了weixinapi的文件夾,即大功告成:

  

4、控件位置擺放與錨點

  每個顯示對象都包含一個錨點,錨點默認位於顯示對象的左上角。

  當設置一個顯示對象的坐標位置時,會以錨點為參照改變顯示對象的繪圖位置。同時,錨點相對於顯示對象的位置也是可以改變的。

  可通過anchorOffsetXanchorOffsetY屬性訪問修改錨點的位置。

5、打包圖集的深入理解,為什么性能好

  使用TextureMerger打包圖集,TexMerger把小圖合成大圖后,生成png+json,用ResDepot加載后,會自動切成小圖躺在資源庫里任你在exml里調用

  使用紋理集的好處很多,我們通過將大量的圖片拼合為一張圖片從而減少網絡請求,原先加載數次的圖片資源現在加載一次即可。 同時,在引擎渲染的時候也會較少IO讀取,從而提高性能。

6、九宮格的理解,哪里會縮放,哪里不縮放

  

  

  上圖中,用四條虛線將圓角矩形分割為9個區域,其中四個區域(圖中區域編號1,3,7,9)包含了圓角矩形的四個圓角。拉伸圖像時,1,3,7,9區域不拉伸,2,8區域僅橫向拉伸,4,6區域僅縱向拉伸,5區域橫向縱向都拉伸。

  設置九宮格的屬性是 Bitmap 類中的 scale9Grid 屬性。

7、http的知識

  參看圖集http、三次握手

8、TCP和UDP的認識、websocket屬於tcp還是udp

  TCP和UDP協議屬於傳輸層協議

  面向連接的TCP就是在正式通信前必須要與對方建立起連接

  面向非連接的UDP協議就是在正式通信前不必與對方先建立連接,不管對方狀態就直接發送

 
  詳細的理解和使用參看 https://blog.csdn.net/li_ning_/article/details/52117463

9、get和post的區別

  get參數通過url傳遞,post放在request body中。

  get請求在url中傳遞的參數是有長度限制的,而post沒有。

  get比post更不安全,因為參數直接暴露在url中,所以不能用來傳遞敏感信息。

  get請求只能進行url編碼,而post支持多種編碼方式

  get請求會瀏覽器主動cache,而post支持多種編碼方式。

  get請求參數會被完整保留在瀏覽歷史記錄里,而post中的參數不會被保留。


  GET和POST本質上就是TCP鏈接,並無差別。但是由於HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。
  GET產生一個TCP數據包;POST產生兩個TCP數據包。

10、A*尋路算法的理解

  參看http://www.sohu.com/a/191037466_478315

  弗洛伊德算法

  https://www.baidu.com/link?url=iar951HM2pVjKNTM8e8DOKfe8Aro0jHgcrOnKMJWQAiplf-yyUEC8ynHlk-T_E3Jb5L3xcU_tlv-1sqyhmEMIyacYohZ9GZzJA1iE_O7jmm&wd=&eqid=844e1cfd00002589000000035b8e3e18

11、簡單算法

  

1     
     // 冒泡排序
     for(int i=0;i<arr.length-1;i++){//外層循環控制排序趟數 2       for(int j=0;j<arr.length-1-i;j++){//內層循環控制每一趟排序多少次 3         if(arr[j]>arr[j+1]){ 4           int temp=arr[j]; 5           arr[j]=arr[j+1]; 6           arr[j+1]=temp; 7         } 8       } 9     }

 

12、常用數據庫

  數據庫資料參見 https://blog.csdn.net/github_39336148/article/details/80469708

13、lua的知識  元表metatable和協程

  元表

  在 Lua table 中我們可以訪問對應的key來得到value值,但是卻無法對兩個 table 進行操作。

  因此 Lua 提供了元表(Metatable),允許我們改變table的行為,每個行為關聯了對應的元方法。

  例如,使用元表我們可以定義Lua如何計算兩個table的相加操作a+b。

  如何在游戲中實際應用????

  詳細介紹參見

  http://www.runoob.com/lua/lua-metatables.html

  https://www.cnblogs.com/blueberryzzz/p/8947446.html

  協程

14、websocket的原理

15、egret常用的資源文件類型

  ts文件 代碼文件

  json文件 配置文件

  png文件 圖片資源

  exml文件  皮膚文件

16、tween動畫緩動類的理解

17、OpenGL WebGL了解

18、微信、facebook平台接入問題

  1、拿到平台提供密鑰和appid

  2、准備平台需要的接口 如支付回調接口

  1、配置第三方庫sdk 如微信

  2、參照文檔使用第三方庫提供的接口

19、js和ts的區別

20、哈希表的實現

21、lua C++ JS TypeScript的學習

22、對渲染優化的理解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM