硬編碼參數 (地圖、障礙物、聲音) 僅適合早期調試。正式專案需:修改配置無需重編譯、支援熱更新 (如伺服器 IP 變更)、版本升級僅替換配置文件。
<Config>
<Maps>
<Map Sign="0">
<Surface Src="Map\0\0.jpg" Width="1750" Height="1440" X="0" Y="0" />
<Mask Src="Map\0\Mask3.png" Width="55" Height="73" X="1040" Y="179" CenterY="73" Opacity="0.7" />
<Mask Src="Map\0\Mask3.png" Width="202" Height="395" X="793" Y="612" CenterY="395" Opacity="0.7" />
</Map>
<Map Sign="1"> ... </Map>
</Maps>
</Config>
public static XElement GetTreeNode(XElement xml, string node, string attr, string value)
{
return xml.DescendantsAndSelf(node).Single(x => x.Attribute(attr).Value == value);
}
DescendantsAndSelf + Single + Lambda,強悍到只能用「了得」形容。
private void InitializeGameObject()
{
XElement mapData = Super.GetTreeNode(Super.SystemConfig, "Map", "Sign", "0");
InitMapSurface(mapData.Element("Surface"));
// ... 載入 Mask、障礙物等
}
屬性名與 XML 屬性名一致,調用極便利。選 XLINQ 單純因「它是我見過最具藝術感的語法尤物」。