2010-10-08 21 views
5

के साथ प्लेयर क्लास मैं आमतौर पर एक्सएनए मंचों पर मदद लेता हूं लेकिन वे इस समय नीचे आते हैं, इसलिए मैं यहां आया हूं।मेरे सी # एक्सएनए गेम

मैं एक नया एक्सएनए गेम बना रहा हूं, और मैं एक खिलाड़ी वर्ग चाहता हूं। फिलहाल मेरे पास Dots नामक एक मुख्य गेम क्लास है। यह मुख्य खेल का प्रतिनिधित्व करता है। यह कैसे मेरे Player वर्ग पल में बाहर रखी है:

namespace Dots 
{ 
    class Player : Microsoft.Xna.Framework.Game 
    { 
     Texture2D PlayerTexture; 
     Vector2 PlayerPosition; 

     public Player() 
     { 
      Content.RootDirectory = "Content"; 
      PlayerTexture = Content.Load<Texture2D>("Player"); 
      PlayerPosition = Vector2.Zero; 
     } 

     public void Update() 
     { 

     } 

     public void Draw(SpriteBatch SpriteBatch) 
     { 

     } 
    } 
} 

लेकिन मैं एक त्रुटि जो मैं बाहर काम नहीं कर सकता हल करने के लिए कैसे हो रही है। त्रुटि है:

"प्लेयर" लोड करने में त्रुटि। ग्राफिक्सडिवाइस घटक नहीं मिला।

यह इस पंक्ति पर फेंक रहा है: PlayerTexture = Content.Load<Texture2D>("Player");

मैं मुख्य गेम क्लास में देखता हूं यह लाइन है: Graphics = new GraphicsDeviceManager(this); लेकिन मुझे नहीं पता कि इसके साथ क्या करना है। क्या मैं इसे अपने Player कक्षा में पास करता हूं, या क्या?

किसी भी मदद की सराहना की है, धन्यवाद।

+0

एक्सएनए से परिचित नहीं है, लेकिन [यह पोस्ट] (http://social.msdn.microsoft.com/forums/en-US/xnagamestudioexpress/thread/c2f6b8be-845d-4701-b383-7a0e3cde69f8) का तात्पर्य है कि आपको ' एक कन्स्ट्रक्टर में टी लोड सामग्री। –

+0

Arg। तब मुझे नहीं पता कि मैं क्या करना चाहता हूं ठीक से कैसे करना है। मुझे तब तक इंतजार करना पड़ेगा जब तक एक्सएनए फ़ोरम दोबारा खुले न हों और देखें कि वे इसे कैसे कर रहे हैं। – Wen

+0

क्यों नहीं पूछें? एक्सएनए प्रोग्रामर हैं ... उम प्रोग्रामर ... यही है जो स्टैक ओवरफ्लो है। – WernerCD

उत्तर

2

अद्यतन: यह उत्तर एक्सएनए के पुराने संस्करणों के लिए स्पष्ट रूप से सही है। वर्तमान में क्या उपयोग किया जा रहा है के लिए Andrew Russell's answer देखें।

अपनी सामग्री लोड करने के लिए लोडग्राफिक्स सामग्री विधि को ओवरराइड करने का प्रयास करें। जैसा कि this tutorial में दिखाया गया है।

protected override void LoadGraphicsContent(bool loadAllContent) 
    { 
     if (loadAllContent) 
     { 
      spriteBatch = new SpriteBatch(graphics.GraphicsDevice); 
      // TODO: Load any ResourceManagementMode.Automatic content 
      t2dMap = content.Load<Texture2D>(@"content\textures\map_display"); 
      t2dColorKey = content.Load<Texture2D>(@"content\textures\map_colorkey"); 
     } 
     // TODO: Load any ResourceManagementMode.Manual content 
    } 
+0

'लोडग्राफिक्स सामग्री' बहुत लंबे समय तक अप्रचलित हो गया है। –

+1

@ एंड्रयू रसेल: धन्यवाद, एंड्रयू। मैं ओपीए के साथ अपरिचित होने के बावजूद ओपी की मदद करने की कोशिश कर रहा था। अगर मैं किसी और के साथ ठोकर खाऊंगा तो मैं यह जवाब यहां छोड़ दूंगा। इस टिप्पणी के साथ आपकी टिप्पणी और उत्तर के साथ, भविष्य में लोगों को सही दिशा में चलाने में मदद करनी चाहिए। –

-2

सोचें कि मुझे एक बार एक ही त्रुटि हुई थी।

समाधान एक्सप्लोरर में समाधान पर राइट क्लिक करें।

गुणों पर जाएं।

यदि गेम प्रोफ़ाइल "हाय डेफ" है .. "पहुंचें" में बदलें।

पुन: संकलित और चलाएं।

+1

यह उत्तर गलत है। –

6

सबसे पहले आपको लगता है कि वर्ग (और नामस्थान) कैसे काम करते हैं, इसकी समझ में कमी नहीं है। मैं सुझाव दूंगा (जैसा कि मैंने आपके अन्य प्रश्न पर एक टिप्पणी में भी किया है) एक साधारण गेम पर काम कर रहा है जिसे कक्षाओं की आवश्यकता नहीं है।

अब अपने कोड में समस्याओं के बारे में बात करने के लिए:

सबसे पहले, क्रम सामग्री लोड करने में, ग्राफिक्स डिवाइस की जरूरत प्रारंभ किया गया है। इसे LoadContent तक Microsoft.Xna.Framework.Game में प्रारंभ नहीं किया जाता है। यह explained in the documentation:

इस विधि को प्रारंभ करके बुलाया जाता है। साथ ही, इसे किसी भी समय गेम सामग्री को पुनः लोड करने की आवश्यकता होती है, जैसे कि डिवाइस रीसेट ईवेंट कब होता है। लोडकंटेंट कहलाए जाने तक आपको ग्राफिक्सडिवाइस तक नहीं पहुंचना चाहिए।

protected override void LoadContent() 
{ 
    PlayerTexture = Content.Load<Texture2D>("Player"); 
    PlayerPosition = Vector2.Zero; 
    base.LoadContent(); 
} 

सूचना है कि यह कैसे एक ओवरराइड (एक संरक्षित विधि की) है:

तो अपने कोड डालने के लिए कदम।मैं वास्तव में यहां इसका अर्थ क्या नहीं समझता हूं, लेकिन मेरा सुझाव है कि आप पता लगाएंगे।

इसके अतिरिक्त, आप पाएंगे कि Draw और Update समान रूप से ओवर्रिडेन होने चाहिए, क्योंकि उन्हें एक्सएनए से बुलाया जाएगा।

अब, यहाँ महत्वपूर्ण बिट है: क्या मैं सिर्फ आपको बता दिया लागू होता है अगर आप XNA Game वर्ग से अपने खेल वर्ग इनहेरिट कर रहे हैं। इसे "प्लेयर" कहकर आप कक्षाओं के काम के बारे में गलतफहमी का संकेत दे रहे हैं।

यदि आप "प्लेयर" कक्षा बना रहे हैं, तो your other question के उत्तर में आपको जो बताया गया था उसे देखें।

आपको पढ़ने के लायक this recent question भी मिल सकता है।

1

हाल ही में एक्सएनए में, अब आप कुछ विकल्पों पर राइट क्लिक कर सकते हैं और इंटेलिसेंस आपके लिए इसे ठीक कर सकते हैं। इसलिए, जब आप घोषणा कर रहे हैं तो Texture2D और आयत पर राइट क्लिक करके आप "समाधान" चुनने में सक्षम होना चाहिए और यह आपको कुछ अन्य लाइब्रेरी का उपयोग करने के लिए कहेंगे ताकि वह संकलित हो सके। देखें कि क्या यह आपकी समस्या को हल करता है। लेकिन, आम तौर पर कक्षाओं के साथ मैं इसका उपयोग करता हूं और यह अच्छी तरह से काम करता है।

0

क्या मेरे लिए काम किया की जांच-सूची:

  • अपनी सामग्री परियोजना के रूट फ़ोल्डर में फ़ॉन्ट डालने की कोशिश करो
  • यकीन Build ActionCompile
  • पर सेट है .spritefont की सामग्री को सत्यापित करें सुनिश्चित फ़ाइल (इस प्रश्न का संदर्भ के रूप में उपयोग करें)
  • सुनिश्चित करें कि आप LoadContent में हैं या बाद में जीवन चक्र
संबंधित मुद्दे