XNA फाइल को XNA में कंटेंट फाइल के रूप में कैसे उपयोग करें?


9

मेरे पास एक XML फ़ाइल है जो विभिन्न कार बनाती है जो मेरे गेम में उपलब्ध होगी। फ़ाइल इस तरह दिखती है:

<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
  <Asset Type="List[string]">
    <car>Audi</car>
    <car>BMW</car>
    <car>Nissan</car>
    <car>Volvo</car>
  </Asset>
</XnaContent>

इसे मेरे सामग्री फ़ोल्डर में जोड़ने पर, कंपाइलर इस त्रुटि को लौटाता है:

There was an error while deserializing intermediate XML. Cannot find type "List`1"

मैं स्ट्रिंग्स की एक सूची कैसे बना सकता हूं, इसे एक्सएमएल में डाल सकता हूं और इसे एक्सएनए से पढ़ सकता हूं?


आपका deserializing कोड यहां उपयोगी होगा।
तेतरीद

3
मेरा कोई deserializing कोड नहीं है। शायद यहीं से मेरी समस्या शुरू होती है?
eflles

3
टेट्राद के प्रश्न का उत्तर देने के लिए: संभवतः एफ़लिस XmlImporterएक्सएनए कंटेंट पाइपलाइन के भाग का उपयोग कर रहा है । पाइपलाइन एक्सएमबी फाइल में बदलने के लिए एक्सएमएल को डिसेररलाइज़ करती है (जो बाद ContentManagerमें रनटाइम द्वारा लोड की जाएगी )।
एंड्रयू रसेल

जवाबों:


14

मैंने यह जानने की कोशिश नहीं की है कि आपके XML में क्या गलत है - यह शायद किसी नेमस्पेस की कमी है। लेकिन यहाँ सही XML है:

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Generic="System.Collections.Generic">
  <Asset Type="Generic:List[string]">
    <Item>Audi</Item>
    <Item>BMW</Item>
    <Item>Nissan</Item>
    <Item>Volvo</Item>
  </Asset>
</XnaContent>

हुड के तहत वर्ग XmlImporterका उपयोग करता है IntermediateSerializer। तो आपके XML को कैसा दिखना चाहिए, यह निर्धारित करने के लिए निम्न जैसे छोटे प्रोग्राम का उपयोग किया जा सकता है :

var test = new List<string>(){ "Audi", "BMW", "Nissan", "Volvo" };
var sb = new StringBuilder();
using(XmlWriter writer = XmlWriter.Create(sb))
{
    IntermediateSerializer.Serialize(writer, test, null);
}
Console.Write(sb.ToString());

(आप आउटपुट को एक स्ट्रीम में भी बदल सकते हैं, इसे Deserializeविधि में पास कर सकते हैं , और ऑब्जेक्ट को फिर से संगठित कर सकते हैं - बस यह सुनिश्चित करने के लिए कि यह काम कर रहा है, दोगुना होना चाहिए। इसके अलावा हेडर में सही एन्कोडिंग लगाने के लायक है - जैसे: StringBuilderutf-16 ।)

के बारे में कुछ गहराई से जानकारी के लिए IntermediateSerializer, इस पोस्ट से शुरू और अगस्त 2008 तक अभिलेखागार के माध्यम से जारी रखने के लिए , शॉन हैरग्रेव्स के ब्लॉग पर एक नज़र डालें ।


1
इस बारे में पोस्ट की +1 शॉन हैरग्रेव्स श्रृंखला महान है। अपने XML को उत्पन्न करने का सबसे आसान तरीका एक "LevelEditor" प्रोजेक्ट है जिसमें सभी समान कोड हैं, लेकिन सामग्री पाइपलाइन असेंबली का संदर्भ देता है ताकि आप कोड में डिफ़ॉल्ट विशेषताओं के साथ अपनी वस्तुओं को बना सकें, और फिर उन्हें XML में वास्तविक रूप में लोड करने के लिए अनुक्रमित करें। खेल परियोजना।
michael.bartnett

0

यदि आप यह देखना चाहते हैं कि यह कोड उदाहरण के द्वारा कैसे किया जाता है, तो यहाँ एक नमूना है जो xml का उपयोग करता है जैसे आप http://create.msdn.com/en-US/education/catalog/sample/collision करना चाहते हैं

यदि आप लेखों को यह समझाते हुए पढ़ना चाहते हैं कि क्या चल रहा है और xml और सामग्री प्रोसेसर के साथ काम करने के बारे में अंतर्दृष्टि प्राप्त करें, तो इस लिंक पर जाएं, मध्यवर्ती धारावाहिक अनुभाग पर स्क्रॉल करें और वहां 8 या 9 लेख पढ़ें। http://www.talula.demon.co.uk/blogindex.html

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.