我想從定義文件(XML)中加載遊戲對象,然後在準備好的屬性(如武器,紋理,最大速度,視距等)中創建它們。我想到IClonable接口,但它似乎很奇怪。此外,我需要區分單位(士兵,車輛也許是飛機)和建築物。從他們的定義中加載遊戲對象
0
A
回答
0
聽起來像你想要一個可以調用特定工廠的一般工廠。通用工廠採用定義文件並確定對象的通用類型「武器,單位,建築物」。然後它將DOM樹傳遞給該類型的特定工廠。武器工廠知道如何在系統中構建所有不同的武器。並且它將DOM樹傳遞給武器的構造函數,以便構造函數可以使用所有的細節。
您如何編寫這些工廠取決於您的XML的外觀以及您希望實現「自動化」的方式。您需要提供更多具體信息以獲得更具體的答案。
編輯:現在我明白了。您希望將XML文件用作未來對象創建的模板。你想要一個通用的「車輛」對象。你加載「直升機」的XML文件,它創建了一個新的「車輛」類,而實際上並沒有創建一個類,對吧?
因此,您將創建一個車輛「班級」,所有車輛都將從此處下降。然後,您創建一個所有模板下降的車輛模板「類」。 XML用於實例化模板類。模板類用於實例化實際的對象。
class vehicle_template {
vechicle_template(xmlstreamthing x);
// properties found in vehicles, set from xml
};
class vehicle {
vechicle(vehicle_template v);
// properties vehicles have, taken from template
};
vehicle vehicle_factory(string s) {
static map<string,vehicle_template> already_loaded;
vehicle_template vt = already_loaded.find(s);
if (vt == null) {
xmlstreamthing xml = get_xml_from_object_name(s); // you need to figure this part out
if (xml == null) {
throw no_such_vehicle(s);
}
vt = new vehicle_template(xml);
already_loaded.add(s,v);
}
return new vehicle(vt);
}
顯然這不是可運行的代碼,但它應該讓你開始。
我不知道如何讓這些對象的行爲有所不同,但這應該可以解決您的加載問題。也許你需要一種鴨式語言,你可以在運行時向對象添加方法。
0
Don't implement IClonable
。它不區分淺層和深層複製。
我想你想要的是Factory Pattern。
相關問題
- 1. 在遊戲模式下加載對象
- 2. 對象中的對象(名稱'遊戲'沒有定義)
- 3. 遊戲中心讓玩家爲了他們加入到遊戲中
- 4. 加載遊戲中心的朋友和他們的分數到UITableView
- 5. 如何在遊戲中保存/加載對象
- 6. 從數組中加載地圖(對於遊戲)的問題
- 7. 遊戲對象中的相對UILabel
- 8. 競猜對象的遊戲
- 9. 遊戲循環中游戲對象的設計模式
- 10. 如何在遊戲中保存/加載遊戲的狀態?
- 11. 當遊戲對象進入觸發器對象時銷燬遊戲對象?
- 12. SLComposeViewController - 讓他們分享他們通過Facebook玩遊戲只讀
- 13. 如何使用文件/對象輸入流加載遊戲
- 14. 如何保存對象(保存/加載遊戲)
- 15. 旋轉游戲對象
- 16. Silverlight - 遊戲碰撞對象
- 17. 變換遊戲對象
- 18. Java遊戲對象設計
- 19. 移動遊戲對象
- 20. 拖動遊戲對象
- 21. 繞過遊戲對象
- 22. 遊戲對象[]在Unity
- 23. 井字遊戲中的對象創建
- 24. 封裝類中的遊戲對象
- 25. 棋盤遊戲中的對象池AI
- 26. Android中的隱藏對象遊戲?
- 27. C#2D遊戲中對象的結構
- 28. 如何在移動的遊戲對象與其他遊戲對象碰撞時立即停止?
- 29. 玩家遊戲對象在遊戲中消失
- 30. 遊戲正在加載Javascript
你的問題是什麼? – JoshJordan 2009-04-23 16:29:09
如何設計這個「系統」。 jmucchiello已經回答了(用通用工廠調用特定的工廠),但我只想解析定義文件一次(最好在啓動時) – mnn 2009-04-23 17:36:07