µ±Ç°Î»Öà : 145zÓÎÏ·Õ¾¡¡|¡¡ÈÈѪ´«Ææ¡¡|¡¡¼¼Êõ½Ì³Ì¡¡|¡¡

GOM´«ÆæÒýÇæÖеġ°Ðü¸¡°´Å¥¡±ºÍ¡°×Ô¶¨Òå°´Å¥¡±¹¦ÄÜʵÏÖ

Èȶȣº
ÔÚ´«ÆæÀàÓÎÏ·µÄ¿ª·¢ÖУ¬**Óû§½çÃæ£¨UI£©µÄÁé»îÐԺͽ»»¥Ð§ÂÊ**Ö±½ÓÓ°ÏìÍæ¼ÒµÄ³Á½þ¸ÐÓë²Ù×÷ÌåÑé¡£GOMÒýÇæÆ¾½èÆä¸ß¶È¿É¶¨ÖƵÄUIϵͳ£¬ÓÈÆäÊÇ **“Ðü¸¡°´Å¥”** Óë **“×Ô¶¨Òå°´Å¥”** ¹¦ÄÜ£¬³ÉΪ¿ª·¢ÕßÓÅ»¯ÓÎÏ·½çÃæµÄºËÐŤ¾ß¡£±¾ÎĽ«´Ó¹¦ÄÜʵÏÖ¡¢¼¼ÊõÂß¼­µ½Ó¦Óó¡¾°£¬È«Ãæ½âÎöÕâÁ½´ó¹¦ÄܵÄÔ­ÀíÓëDZÁ¦¡£

---

### Ò»¡¢¹¦Äܶ¨Î»ÓëÉè¼ÆÂß¼­
#### 1. **Ðü¸¡°´Å¥£¨Floating Button£©**
- **¶¯Ì¬½»»¥ÌØÐÔ**£ºÐü¸¡°´Å¥¿ÉÍÑÀë¹Ì¶¨UIÃæ°å£¬¸ù¾ÝÍæ¼Ò²Ù×÷»ò³¡¾°ÐèÇó¶¯Ì¬µ÷ÕûλÖã¨Èç¸úËæ½ÇÉ«ÒÆ¶¯¡¢Îü¸½ÓÚÆÁÄ»±ßÔµ£©¡£
- **µäÐÍÓ¦Óó¡¾°**£º
- **¿ì½Ý²Ù×÷**£º¿ìËÙÇл»¼¼ÄÜ¡¢Ò©Æ·Ê¹Óá£
- **³¡¾°Ìáʾ**£ºÔÚÌØ¶¨µØÍ¼£¨ÈçBOSSÕ½³¡£©×Ô¶¯µ¯³öÈÎÎñÖ¸Òý»òΣÏÕ¾¯¸æ¡£
- **¼¼ÊõÏÞÖÆ**£ºÐèͨ¹ý×ø±ê¿ØÖÆ£¨`X/YÖáÆ«ÒÆÖµ`£©ºÍ´¥·¢Ìõ¼þ£¨ÈçѪÁ¿µÍÓÚ30%ʱÏÔʾ£©ÊµÏÖ¶¯Ì¬Âß¼­¡£

#### 2. **×Ô¶¨Òå°´Å¥£¨Custom Button£©**
- **Áé»îÐÔÓë¶àÑùÐÔ**£º¿ª·¢Õß¿É×Ô¶¨Òå°´Å¥µÄͼ±ê¡¢³ß´ç¡¢´¥·¢Ê¼þ¼°¶¯»­Ð§¹û£¬ÉõÖÁǶÌ׸´Ôӽű¾¡£
- **ºËÐÄÓÅÊÆ**£º
- **¶à²ã¼¶½»»¥**£ºÖ§³Ö°´Å¥×éǶÌ×£¨ÈçÖ÷²Ëµ¥Õ¹¿ª×Ó°´Å¥£©¡£
- **Ìõ¼þ´¥·¢**£º¸ù¾ÝÍæ¼ÒµÈ¼¶¡¢×°±¸×´Ì¬µÈ¶¯Ì¬ÏÔʾ»òÒþ²Ø°´Å¥¡£
- **Éè¼Æ°¸Àý**£ºÔÚÐлá½çÃæÖУ¬Í¨¹ý×Ô¶¨Ò尴ťʵÏÖ“Ò»¼üÕÙ»½³ÉÔ±”“×ÊÔ´¾èÏ×”µÈ¸´ÔÓ¹¦ÄÜ¡£

---

### ¶þ¡¢¼¼ÊõʵÏÖ£º´Ó½Å±¾µ½ÒýÇæµÄЭ×÷
#### 1. **µ×²ãÂß¼­ÒÀÀµ**
- **LUA½Å±¾Çý¶¯**£º°´Å¥µÄÏÔʾ¡¢Òþ²Ø¼°Ê¼þÏìӦͨ³£Í¨¹ýLUA½Å±¾ÓëÒýÇæAPI½»»¥¡£ÀýÈ磺
```lua
-- ´´½¨Ðü¸¡°´Å¥²¢°ó¶¨Ê¼þ
local btn = ui.CreateFloatingButton("icon_boss", 100, 100)
btn.OnClick = function()
ExecuteSkill("FireSword") -- ´¥·¢¼¼ÄÜ
end
```

- **×ø±êÓë²ã¼¶¿ØÖÆ**£ºÍ¨¹ý`SetPosition()`ºÍ`SetZOrder()`¹ÜÀí°´Å¥µÄÏÔʾÓÅÏȼ¶£¬±ÜÃâÓëÆäËûUIÔªËØ³åÍ»¡£

#### 2. **×ÊÔ´¹ÜÀíÓëÐÔÄÜÓÅ»¯**
- **ËØ²Ä¹æ·¶**£º°´Å¥Í¼±êÐèÊÊÅä¶àÖÖ·Ö±æÂÊ£¨Èç1024x768¡¢1920x1080£©£¬²¢Ô¤¼ÓÔØÖÁ×ÊÔ´³ØÒÔ¼õÉÙ¿¨¶Ù¡£
- **ʼþ½ÚÁ÷**£º¸ßƵ´¥·¢µÄ°´Å¥£¨ÈçÁ¬»÷¼¼ÄÜ£©ÐèÉèÖÃÀäȴʱ¼ä»òʼþ¶ÓÁУ¬·ÀÖ¹½Å±¾×èÈû¡£

---

### Èý¡¢Ó¦Óó¡¾°Ó뿪·¢Êµ¼ù
#### 1. **ÌáÉýÕ½¶·Á÷³©¶È**
- **°¸Àý**£ºÔÚPK³¡¾°ÖУ¬Ðü¸¡°´Å¥¿ÉʵʱÏÔʾµÐÈËѪÁ¿ºÍ¾àÀ룬×Ô¶¨Òå°´Å¥ÔòÌṩ“Ò»¼ü»»×°”“¿ì½Ý»Ø³Ç”¹¦ÄÜ¡£
- **Êý¾ÝÑéÖ¤**£ºÄ³´«ÆæÊµ²âÏÔʾ£¬ÒýÈëÐü¸¡¼¼ÄÜÀ¸ºó£¬Íæ¼Ò²Ù×÷ÏìÓ¦ËÙ¶ÈÌáÉýÔ¼40%¡£

#### 2. **ÐÂÊÖÒýµ¼Ó븶·Ñת»¯**
- **¶¯Ì¬Òýµ¼**£ºÍ¨¹ýÐü¸¡°´Å¥¸ßÁÁй¦ÄÜ£¨ÈçÊ׳äÀñ°ü£©£¬²¢½áºÏ¶¯»­Ð§¹ûÎüÒýµã»÷¡£
- **¸¶·ÑÈë¿Ú¶¨ÖÆ**£ºÔÚVIP½çÃæÖУ¬×Ô¶¨Òå°´Å¥¿Éչʾ²»Í¬µµÎ»ÌØÈ¨£¬Ö±½ÓÌø×ªÖ§¸¶Ò³Ãæ¡£

#### 3. **Ðлá¹ÜÀíÓëÉç½»ÔöÇ¿**
- **Ðü¸¡¹«¸æ°å**£ºÐлáÁìÐä¿É·¢²¼¶¯Ì¬Ö¸ÁÈ缯½á×ø±ê£©£¬°´Å¥ÊµÊ±Ë¢Ð²¢Í¬²½ÖÁ³ÉÔ±½çÃæ¡£
- **×Ô¶¨Òå½»»¥Á´**£ºÀýÈ糤°´°´Å¥´¥·¢ÓïÒôÁÄÌ졢˫»÷·¢ËÍÔ¤ÉèÕ½ÊõÖ¸Áî¡£

---

### ËÄ¡¢¿ª·¢Öеij£¼ûÎÊÌâÓëÓÅ»¯½¨Òé
#### 1. **·Ö±æÂÊÊÊÅäÎÊÌâ**
- **ÎÊÌâ**£º°´Å¥Î»ÖÃÔڸ߷ֱæÂÊÆÁÄ»ÖÐÆ«ÒÆ¡£
- **½â¾ö·½°¸**£ºÊ¹ÓÃÏà¶Ô×ø±ê£¨°Ù·Ö±È£©¶ø·Ç¹Ì¶¨ÏñËØÖµ£¬»òͨ¹ý`êµã£¨Anchor£©`°ó¶¨ÆÁÄ»±ßÔµ¡£

#### 2. **ʼþ³åÍ»ÓëÎó´¥**
- **ÎÊÌâ**£ºÐü¸¡°´Å¥ÕÚµ²¹Ø¼ü²Ù×÷ÇøÓò£¨Èç½ÇÉ«ÒÆ¶¯Ò¡¸Ë£©¡£
- **½â¾ö·½°¸**£ºÉèÖÓ͸Ã÷´©Í¸”ÊôÐÔ£¬»òÔö¼Ó°´Å¥ÍÏ×§¸´Î»¹¦ÄÜ¡£

#### 3. **ÐÔÄÜ¿ªÏú¿ØÖÆ**
- **ÓÅ»¯²ßÂÔ**£º
- ¶ÔÒþ²Ø°´Å¥½ûÓÃUpdateʼþ¡£
- ʹÓÃÎÆÀíѹËõ¼¼Êõ¼õÉÙͼ±ê×ÊÔ´Õ¼Óá£

---

### Î塢δÀ´Õ¹Íû£º´Ó¹¦Äܵ½Éú̬µÄÑÓÉì
- **AIÇý¶¯µÄ¶¯Ì¬UI**£º½áºÏÍæ¼ÒÐÐΪÊý¾Ý£¬×Ô¶¯µ÷Õû°´Å¥²¼¾Ö£¨Èç¸ßƵ¼¼ÄÜÓÅÏÈÖö¥£©¡£
- **¿çƽ̨ÊÊÅä**£ºÌ½Ë÷ÒÆ¶¯¶Ë´¥¿ØÊÖÊÆÓëÐü¸¡°´Å¥µÄÈںϣ¨È绬¶¯Õ¹¿ª¼¼ÄÜÂÖÅÌ£©¡£

---

#### ½áÓï
GOMÒýÇæµÄ“Ðü¸¡°´Å¥”Óë“×Ô¶¨Òå°´Å¥”²»½öÊǼ¼Êõ¹¤¾ß£¬¸üÊÇ**ÖØËÜÍæ¼Ò½»»¥ÌåÑé**µÄÇÅÁº¡£Í¨¹ý¾«×¼µÄ½Å±¾¿ØÖÆÓë×ÊÔ´ÓÅ»¯£¬¿ª·¢Õß¿ÉÍ»ÆÆ´«Í³´«ÆæÓÎÏ·µÄUIÏÞÖÆ£¬´òÔì¼æ¾ßЧÂÊÓë³Á½þ¸ÐµÄ¸öÐÔ»¯½çÃæ¡£Î´À´£¬Ëæ×ÅÒýÇæ¹¦Äܵĵü´ú£¬ÕâÁ½´óÄ£¿é»ò½«³ÉΪÓÎÏ·²îÒ컯µÄ¹Ø¼ü¾ºÕùÁ¦¡£

#### 1. ×¼±¸¹¤×÷
ÔÚ¿ªÊ¼Ö®Ç°£¬ÇëÈ·±£ÄãÒѾ­°²×°ÁËGOMÒýÇæ£¬²¢ÇÒÓÐÒ»¸ö»ù±¾µÄÓÎÏ·¿ò¼Ü´î½¨Íê³É¡£´ËÍ⣬»¹ÐèҪ׼±¸ºÃËùÓбØÒªµÄ¿Í»§¶ËºÍ·þÎñÆ÷¶ËÎļþ¡£

#### 2. Àí½â“Ðü¸¡°´Å¥”ºÍ“×Ô¶¨Òå°´Å¥”

##### ¸¡¶¯°´Å¥£¨Floating Button£©
¸¡¶¯°´Å¥ÊÇÖ¸¹Ì¶¨ÔÚÆÁĻij¸öλÖõİ´Å¥£¬Í¨³£ÓÃÓÚ¿ìËÙ·ÃÎʳ£Óù¦ÄÜ£¬Èç´ò¿ªÉ̵ꡢ´«ËÍÃŵȡ£

##### ×Ô¶¨Òå°´Å¥£¨Custom Button£©
×Ô¶¨Òå°´Å¥ÊÇÖ¸¿ÉÒÔ¸ù¾ÝÐèÒªÌí¼Óµ½½çÃæÈÎÒâλÖõİ´Å¥£¬Ìṩ¸ü¶àµÄ½»»¥Ñ¡ÏÈç¼¼ÄÜ¿ì½Ý¼ü¡¢ÈÎÎñÌáʾµÈ¡£

#### 3. ʵÏÖ¸¡¶¯°´Å¥

##### ²½ÖèÒ»£º±à¼­ÅäÖÃÎļþ
Ê×ÏÈ£¬ÔÚ`data\button_proto.txt`ÎļþÖÐÌí¼Ó¸¡¶¯°´Å¥µÄÅäÖá£

```plaintext
vnum name type position x y width height image_normal image_pressed script
1001 É̵갴ť FLOATING_BUTTON TOP_RIGHT 10 10 50 50 buttons/shop_button.png buttons/shop_button_pressed.png open_shop_dialog()
```

- `vnum`: °´Å¥Î¨Ò»±àºÅ¡£
- `name`: °´Å¥Ãû³Æ¡£
- `type`: °´Å¥ÀàÐÍ£¨FLOATING_BUTTON£©¡£
- `position`: ¹Ì¶¨Î»Öã¨TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT£©¡£
- `x`: X×ø±êÆ«ÒÆÁ¿¡£
- `y`: Y×ø±êÆ«ÒÆÁ¿¡£
- `width`: °´Å¥¿í¶È¡£
- `height`: °´Å¥¸ß¶È¡£
- `image_normal`: ĬÈÏͼÏñ·¾¶¡£
- `image_pressed`: °´Ñ¹×´Ì¬ÏµÄͼÏñ·¾¶¡£
- `script`: µã»÷°´Å¥Ê±Ö´ÐеĽű¾¡£

##### ²½Öè¶þ£º×¼±¸Í¼Ïñ×ÊÔ´
È·±£Í¼Ïñ×ÊÔ´´æÔÚÓÚÖ¸¶¨Â·¾¶Ï¡£

```plaintext
resource/image/buttons/shop_button.png
resource/image/buttons/shop_button_pressed.png
```

##### ²½ÖèÈý£ºÐ޸Ŀͻ§¶Ë´úÂë
ÔÚ¿Í»§¶Ë´úÂëÖд¦Àí°´Å¥Ê¼þ¡£´ò¿ª`src/client_ui.cpp`Îļþ£¬Ìí¼Ó´¦Àí¸¡¶¯°´Å¥µÄÂß¼­¡£

**client_ui.cpp**
```cpp
#include "client_ui.h"
#include "packet_sender.h"

void CClientUI::InitializeButtons()
{
// ³õʼ»¯¸¡¶¯°´Å¥
CUIButton* shopButton = new CUIButton();
shopButton->SetVnum(1001);
shopButton->SetName("É̵갴ť");
shopButton->SetType(BUTTON_TYPE_FLOATING);
shopButton->SetPosition(TOP_RIGHT, 10, 10);
shopButton->SetSize(50, 50);
shopButton->SetImageNormal("buttons/shop_button.png");
shopButton->SetImagePressed("buttons/shop_button_pressed.png");
shopButton->SetScript("open_shop_dialog()");

AddButton(shopButton);
}

void CClientUI::OnButtonClick(int buttonVnum)
{
switch (buttonVnum)
{
case 1001: // É̵갴ť
ExecuteScript("open_shop_dialog()");
break;
// ÆäËû°´Å¥...
}
}

void CClientUI::ExecuteScript(const std::string& script)
{
if (script == "open_shop_dialog()")
{
OpenShopDialog();
}
// ÆäËû½Å±¾...
}

void CClientUI::OpenShopDialog()
{
// ÏÔʾÉ̵ê¶Ô»°¿ò
CUIDialog* shopDialog = new CUIDialog(DIALOG_SHOP);
AddDialog(shopDialog);
}
```

##### ²½ÖèËÄ£º±àÒë²¢²âÊÔ
È·±£ËùÓÐÐ޸ĺóµÄ´úÂë¶¼Äܳɹ¦±àÒë¡£

```sh
g++ -o client src/client_main.cpp src/client_ui.cpp src/packet_sender.cpp -lengine
```

Æô¶¯¿Í»§¶Ë£¬¹Û²ì¸¡¶¯°´Å¥ÊÇ·ñÕýÈ·ÏÔʾºÍÏìÓ¦µã»÷ʼþ¡£

```sh
start client.exe
```

#### 4. ʵÏÖ×Ô¶¨Òå°´Å¥

##### ²½ÖèÒ»£º±à¼­ÅäÖÃÎļþ
ÔÚ`data\button_proto.txt`ÎļþÖÐÌí¼Ó×Ô¶¨Òå°´Å¥µÄÅäÖá£

```plaintext
vnum name type position x y width height image_normal image_pressed script
1002 ¼¼Äܰ´Å¥ CUSTOM_BUTTON INVENTORY_TAB 100 100 50 50 buttons/skill_button.png buttons/skill_button_pressed.png cast_skill(10001)
```

- `vnum`: °´Å¥Î¨Ò»±àºÅ¡£
- `name`: °´Å¥Ãû³Æ¡£
- `type`: °´Å¥ÀàÐÍ£¨CUSTOM_BUTTON£©¡£
- `position`: ¹Ì¶¨Î»Öã¨INVENTORY_TAB, STATUS_TAB, SKILL_TABµÈ£©¡£
- `x`: X×ø±êÆ«ÒÆÁ¿¡£
- `y`: Y×ø±êÆ«ÒÆÁ¿¡£
- `width`: °´Å¥¿í¶È¡£
- `height`: °´Å¥¸ß¶È¡£
- `image_normal`: ĬÈÏͼÏñ·¾¶¡£
- `image_pressed`: °´Ñ¹×´Ì¬ÏµÄͼÏñ·¾¶¡£
- `script`: µã»÷°´Å¥Ê±Ö´ÐеĽű¾¡£

##### ²½Öè¶þ£º×¼±¸Í¼Ïñ×ÊÔ´
È·±£Í¼Ïñ×ÊÔ´´æÔÚÓÚÖ¸¶¨Â·¾¶Ï¡£

```plaintext
resource/image/buttons/skill_button.png
resource/image/buttons/skill_button_pressed.png
```

##### ²½ÖèÈý£ºÐ޸Ŀͻ§¶Ë´úÂë
ÔÚ¿Í»§¶Ë´úÂëÖд¦Àí×Ô¶¨Ò尴ťʼþ¡£´ò¿ª`src/client_ui.cpp`Îļþ£¬Ìí¼Ó´¦Àí×Ô¶¨Òå°´Å¥µÄÂß¼­¡£

**client_ui.cpp**
```cpp
#include "client_ui.h"
#include "packet_sender.h"

void CClientUI::InitializeButtons()
{
// ³õʼ»¯¸¡¶¯°´Å¥
CUIButton* shopButton = new CUIButton();
shopButton->SetVnum(1001);
shopButton->SetName("É̵갴ť");
shopButton->SetType(BUTTON_TYPE_FLOATING);
shopButton->SetPosition(TOP_RIGHT, 10, 10);
shopButton->SetSize(50, 50);
shopButton->SetImageNormal("buttons/shop_button.png");
shopButton->SetImagePressed("buttons/shop_button_pressed.png");
shopButton->SetScript("open_shop_dialog()");

AddButton(shopButton);

// ³õʼ»¯×Ô¶¨Òå°´Å¥
CUIButton* skillButton = new CUIButton();
skillButton->SetVnum(1002);
skillButton->SetName("¼¼Äܰ´Å¥");
skillButton->SetType(BUTTON_TYPE_CUSTOM);
skillButton->SetPosition(INVENTORY_TAB, 100, 100);
skillButton->SetSize(50, 50);
skillButton->SetImageNormal("buttons/skill_button.png");
skillButton->SetImagePressed("buttons/skill_button_pressed.png");
skillButton->SetScript("cast_skill(10001)");

AddButton(skillButton);
}

void CClientUI::OnButtonClick(int buttonVnum)
{
switch (buttonVnum)
{
case 1001: // É̵갴ť
ExecuteScript("open_shop_dialog()");
break;
case 1002: // ¼¼Äܰ´Å¥
ExecuteScript("cast_skill(10001)");
break;
// ÆäËû°´Å¥...
}
}

void CClientUI::ExecuteScript(const std::string& script)
{
if (script == "open_shop_dialog()")
{
OpenShopDialog();
}
else if (script.substr(0, 11) == "cast_skill(")
{
int skillVnum = std::stoi(script.substr(11, script.find(')') - 11));
CastSkill(skillVnum);
}
// ÆäËû½Å±¾...
}

void CClientUI::CastSkill(int skillVnum)
{
CPacketSender::GetInstance()->SendCastSkillPacket(skillVnum);
}
```

##### ²½ÖèËÄ£º±àÒë²¢²âÊÔ
È·±£ËùÓÐÐ޸ĺóµÄ´úÂë¶¼Äܳɹ¦±àÒë¡£

```sh
g++ -o client src/client_main.cpp src/client_ui.cpp src/packet_sender.cpp -lengine
```

Æô¶¯¿Í»§¶Ë£¬¹Û²ì×Ô¶¨Òå°´Å¥ÊÇ·ñÕýÈ·ÏÔʾºÍÏìÓ¦µã»÷ʼþ¡£

```sh
start client.exe
```

#### 5. ÈÕÖ¾Îļþ¼ì²é

##### ²é¿´¿Í»§¶ËÈÕÖ¾
´ò¿ª¿Í»§¶ËµÄÈÕÖ¾Îļþ£¨Í¨³£Î»ÓÚ`log\client.log`£©£¬²éÕÒÏà¹ØµÄ´íÎóÐÅÏ¢¡£

```plaintext
[2023-10-01 12:34:56] INFO: Initialized floating button [É̵갴ť] at position (TOP_RIGHT, 10, 10)
[2023-10-01 12:34:56] INFO: Initialized custom button [¼¼Äܰ´Å¥] at position (INVENTORY_TAB, 100, 100)
[2023-10-01 12:34:56] INFO: Clicked button [É̵갴ť], executing script [open_shop_dialog()]
[2023-10-01 12:34:56] INFO: Opening shop dialog
[2023-10-01 12:34:56] INFO: Clicked button [¼¼Äܰ´Å¥], executing script [cast_skill(10001)]
[2023-10-01 12:34:56] INFO: Casting skill [10001]
```

¸ù¾ÝÈÕÖ¾ÖеÄÐÅÏ¢£¬È·Èϰ´Å¥ÊÇ·ñÕýÈ·³õʼ»¯ºÍÏìÓ¦µã»÷ʼþ¡£

#### 6. ³£¼ûÎÊÌâ¼°½â¾ö·½°¸

##### ÎÊÌâÒ»£º°´Å¥²»ÏÔʾ
- **¼ì²éÅäÖÃÎļþ**£ºÈ·±£`button_proto.txt`ÖеÄÅäÖÃÕýÈ·ÎÞÎó¡£
- **¼ì²éͼÏñ×ÊÔ´**£ºÈ·±£Í¼ÏñÎļþ´æÔÚ²¢ÇÒ·¾¶ÕýÈ·¡£
- **ÖØÆô¿Í»§¶Ë**£ºÓÐʱºòÖØÆô¿Í»§¶Ë¿ÉÒÔ½â¾öÏÔʾÎÊÌâ¡£

##### ÎÊÌâ¶þ£º°´Å¥µã»÷ÎÞ·´Ó¦
- **¼ì²é½Å±¾**£ºÈ·±£½Å±¾ÄÚÈÝÕýÈ·²¢ÇÒÖ§³ÖËùÐèµÄ²Ù×÷¡£
- **¼ì²é´úÂëÂß¼­**£ºÈ·±£°´Å¥µã»÷ʼþ±»ÕýÈ·²¶»ñºÍ´¦Àí¡£
- **ÆôÓõ÷ÊÔģʽ**£ºÆôÓõ÷ÊÔģʽ²é¿´ÏêϸµÄÈÕÖ¾ÐÅÏ¢¡£

##### ÎÊÌâÈý£ºÍ¼Ïñ¼ÓÔØÊ§°Ü
- **¼ì²éÎļþ·¾¶**£ºÈ·±£Í¼ÏñÎļþ·¾¶ÕýÈ·¡£
- **¸üÐÂ×ÊÔ´°ü**£ºÈ·±£ÐµÄͼÏñÎļþ±»´ò°üµ½¿Í»§¶Ë×ÊÔ´°üÖС£
- **¼ì²éÎļþȨÏÞ**£ºÈ·±£¿Í»§¶ËÓжÁȡͼÏñÎļþµÄȨÏÞ¡£

##### ÎÊÌâËÄ£ºÍøÂçÑÓ³Ùµ¼Ö°´Å¥Ê§Ð§
- **ÓÅ»¯ÍøÂçͨÐÅ**£ºÈ·±£ÍøÂçÁ¬½ÓÎȶ¨¡£
- **¼õÉÙÊý¾Ý°ü´óС**£ºÓÅ»¯Êý¾Ý°üÒÔ¼õÉÙ´«Êäʱ¼ä¡£
- **¼ì²é·À»ðǽÉèÖÃ**£ºÈ·±£·À»ðǽûÓÐ×èÖ¹±ØÒªµÄͨÐÅ¡£

#### 7. ×ܽá
ͨ¹ýÒÔÉϲ½Ö裬ÄãÓ¦¸ÃÄܹ»ÔÚGOM´«ÆæÒýÇæÖгɹ¦ÊµÏÖ“Ðü¸¡°´Å¥”ºÍ“×Ô¶¨Òå°´Å¥”¹¦ÄÜ¡£Õâ²»½öÌáÉýÁËÓÎÏ·µÄ½»»¥ÐÔºÍÓû§ÌåÑ飬»¹ÌṩÁ˸ü¶àµÄ¶¨ÖÆ»¯Ñ¡ÏϣÍûÕâÆª½Ì³Ì¶ÔÄãÓÐËù°ïÖú£¡