एक्सएनए ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है

मैंने एक बाउंसिंग बॉल गेम बनाया है और मेरे पास टकराव सेट हैं ताकि मेरी गेंद ऑब्जेक्ट्स का उछाल सके। गेंद को ऑब्जेक्ट से उछालने के बाद मुझे यह पसंद आएगा कि ऑब्जेक्ट हटा दिया गया है। यह देखने के बाद कि मैं इसे कैसे करने के बाद अपना बॉक्स (ऑब्जेक्ट) क्लास को शून्य (जिसे ऑब्जेक्ट को हटा देना चाहिए) सेट करने का प्रयास कर रहा हूं।

कुछ कारणों से हालांकि गेंद को हिट करने के बाद और बॉक्स को null पर सेट करने का प्रयास करता है मुझे गेम 1.cs के अंदर ड्रॉ विधि पर निम्न त्रुटि मिलती है:

NullReferenceException को अनचाहे किया गया था। ऑब्जेक्ट संदर्भ एक पर सेट नहीं है   किसी ऑब्जेक्ट का उदाहरण।

कोड को बॉक्स को null पर सेट करना:

if (hastouched == 3)
{
    Box = null;
}

मुझे कोड के इस टुकड़े पर Game1.cs में मुख्य ड्रा फ़ंक्शन में त्रुटि प्राप्त हो रही है:

Box.Draw(spriteBatch);

क्या यह कुछ सीधे जानता है कि यह क्यों हो रहा है या आप मेरे अधिक कोड को देखना चाहते हैं? यदि हां, तो कौन से हिस्से? धन्यवाद

0
सभी को धन्यवाद, @ ब्रैंडन - पूरी तरह से काम करते हैं
जोड़ा लेखक Rich, स्रोत
आप अपने बॉक्स कक्षा पर एक संपत्ति भी जोड़ सकते हैं, जो आपके ऑब्जेक्ट की स्थिति संग्रहीत करता है: IsInactive । जब आपका <कोड> बॉक्स ऑब्जेक्ट उपयोग में है, तो मान true पर सेट किया जाएगा। फिर आप इसे null के बजाय false पर सेट कर देंगे।
जोड़ा लेखक Andrei V, स्रोत
आप बॉक्स को शून्य पर सेट कर रहे हैं, और फिर इसे खींचने की कोशिश कर रहे हैं।
जोड़ा लेखक Golden Dragon, स्रोत
इससे बचने के लिए यदि आप (बॉक्स! = शून्य) {Box.Draw (spriteBatch)} चेक कर सकते हैं तो आप एक चेक जोड़ सकते हैं;
जोड़ा लेखक Brandon, स्रोत

1 उत्तर

जैसा कि टिप्पणियां कह रही हैं, आप किसी वस्तु को शून्य करने और इसे खींचने की कोशिश कर रहे हैं, यही कारण है कि आपको वह त्रुटि प्राप्त होती है।

मुझे लगता है कि ऐसा करने का बेहतर तरीका है Draw क्लास DrawableGameComponent से प्राप्त करने के लिए, ताकि जब आप इसका एक नया उदाहरण बनाते हैं तो आपको केवल इसे जोड़ना होगा Game.components , इस तरह XNA अपने अपडेट और Draw विधियों को स्वयं ही संभाल लेगा।
जब आप इसे हटाना चाहते हैं तो आप बस Game.Components.Remove (Box) को कॉल कर सकते हैं (बेशक यहां बॉक्स एक चर के रूप में है, वर्ग नहीं)।

0
जोड़ा
यदि आपके पास प्रबंधक के लिए कई ऑब्जेक्ट हैं, तो यह एक उपयुक्त समाधान है, लेकिन यदि आपके पास केवल वह बॉक्स है Brandon का समाधान सबसे अच्छा है :)
जोड़ा लेखक pinckerman, स्रोत
एक बार फिर आपकी मदद के लिए धन्यवाद, मैंने 'अगर (बॉक्स! = नल) {Box.Draw (spriteBatch);}' विधि के लिए जाने का फैसला किया क्योंकि यह जल्दी था, हालांकि मैं निश्चित रूप से अगली बार इसे ध्यान में रखूंगा :)
जोड़ा लेखक Rich, स्रोत