---
# System prepended metadata

title: Egret FAQ
tags: [Egret]

---

# Egret FAQ

### Q1. Main.ts 這支是怎麼被啟動的？我能更改啟動的 ts 對象嗎
:::success
**index.html** 裡的 **data-entry-class** 決定了入口(預設為 Main)，你可以在這裡修改
:::
![](https://i.imgur.com/PPxpjpY.png)

### Q2. 創建專案時的 Game 項目、EUI 項目有什麼不同
:::success
引入的 Library 不同，沒有互相包含，但也可以混用，只是需要 **手動引入** 對應的 Libs，以目前專案集合 UI 的特性，比較適合直接使用 **EUI** 創建項目
:::

### Q2a. 如果創建專案忘了勾選 Game 項目, 要如何補上去
:::success
* 開啟 **egretProperties.json** 並且在 **module** 底下新增以下內容
```
{
    "name": "game"
}
```
* 打開 console 執行 **egret build -e**
* 完成後, 會在專案底下的 **libs/modules** 出現 **game** 資料夾
:::

### Q3. createChildren 的觸發時機
:::success
用於手動創建 Skin 內容(即未綁定 Skin)
**唯一** 觸發點為該 eui.UILayer 在 stage 創建前，**比 constructor 早**
:::

### Q4. childrenCreated 的觸發時機
:::success
UILayer 創建完成時觸發此函數，可用來覆寫一些初始化
**唯一** 觸發點為該 eui.UILayer 在 stage 創建完成時，**比 constructor 晚**
:::

### Q5. partAdded 觸發時機
:::success
只要綁定的 Skin (exml) 有設定 UI 的 ID 就會觸發 partAdded，這個方法主要是讓你可以對 UI 做一些初始化設定，而不是在 Skin 端寫死
:::
```
protected partAdded(partName: string, instance: any): void
```

### Q6. 如何取得 skin 上多個連續元件
:::success
透過 **this[名稱]** 來取得
假設有5個的 eui.Rect 元件, 名稱是 obj0, obj1....以此類推
:::
```
//VS可自動辨別 target 的型別是 eui.Rect
let target = this["obj0"];

for(let i = 0; i < 5; i++){
    //VS無法辨識型別, 會標示成 any
    //建議把型別標上去
    let target2 : eui.Rect = this["obj" + i];
}
```

---

### Q7. 如何有效的進行 debug
:::success
參考 [Get Started with Debugging JavaScript in Chrome DevTools](https://developers.google.com/web/tools/chrome-devtools/javascript)
:::

---
### Q8. screen.width 拿到的寬度與實際顯示寬度不符
:::success
windows作業系統有調過文字大小，會直接影響到 screen.width
需要拿 window.devicePixelRatio 再做一次計算
:::

---
### Q9. 如何規避 Array.isArray() 引發的錯誤
:::info
範例
```
interface ABC{
    name: string;
    value: number;
}

let list:ABC[] = [{"name":"A", "value":1}];

if(Array.isArray(list))
    console.log("isArray, " + list[0].name);
else
    console.log("notArray, " + list[0].name);

```
:::
:::danger
發生問題
* else 區塊會找不到 list[0].name
:::

:::success
解決方法
* 不要在條件式判斷 Array.isArray, 把結果指定給一個 boolean 區域變數

```
let isArray: boolean = Array.isArray(list);
if(isArray)
    console.log("isArray, " + list[0].name);
else
    console.log("notArray, " + list[0].name);
```
:::

---
###### tags: `Egret`