2013-07-11 12 views
6

मैं विंडोज फोन (एक्सएनए) के लिए अपना पहला गेम बना रहा हूं। मैं स्क्रीन पर एक क्रॉसहेयर की स्थिति बदलने के लिए Accelerometer का उपयोग करें:विंडोज फोन 8 एक्सेलेरोमीटर घटनाएं

Position of crosshair

यहाँ मेरी Initialize() समारोह में कोड है (ध्यान दें कि Accelerometer स्थानीय चर इस समारोह में केवल घोषित है):

Accelerometer accelerometer = new Accelerometer(); 
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged; 
accelerometer.Start(); 

और ईवेंट हैंडलर:

void accelerometer_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e) 
     { 
      lock (accelerometerVectorLock) 
      { 
       accelerometerVector = new Vector3(
        (float)e.SensorReading.Acceleration.X, 
        (float)e.SensorReading.Acceleration.Y, 
        (float)e.SensorReading.Acceleration.Z); 
      } 
     } 

यह ठीक काम करता है विंडोज फोन एमुलेटर पर, और नोकिया लुमिया 520 पर कंप्यूटर से कनेक्ट और विजुअल स्टूडियो से लॉन्च होने पर, हालांकि जब मैं फोन में गेम लॉन्च करता हूं (कंप्यूटर से कनेक्ट नहीं), तो एक्सेलेरोमीटर_CurrentValueChanged ईवेंट केवल एक बार, एप्लिकेशन पर कहा जाता है चालू होना। ,

accelerometer = new Accelerometer(); 
accelerometer.CurrentValueChanged += accelerometer_CurrentValueChanged; 
accelerometer.Start(); 

तो मेरे सवाल है क्यों इस समाधान काम करता है:

मेरे समाधान इस तरह accelerometer मेरे खेल वर्ग के एक सदस्य है, तो प्रारंभ (में कोड) बनाने के लिए किया गया था? और वीएस से लॉन्च किए गए एप्लिकेशन और सामान्य रूप से, उसी डिवाइस पर भी कोई अंतर क्यों है?

उत्तर

6

यह समाधान क्यों काम करता है?

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

वीएस से लॉन्च किए गए एप्लिकेशन और सामान्य रूप से उसी डिवाइस पर क्यों अंतर है?

विजुअल स्टूडियो से कोड लॉन्च करते समय, एक डीबगर संलग्न होता है। डिबगिंग में आपकी सहायता के लिए, कोड निष्पादित करने के तरीके पर इसका कुछ प्रभाव पड़ता है। विशेष रूप से, यह कचरा कलेक्टर रास्ता कम आक्रामक बनाता है। यह बताता है कि डीबगर संलग्न के साथ परीक्षण करते समय आपके पास यह समस्या क्यों नहीं थी। ध्यान दें कि आप विजुअल स्टूडियो में नियंत्रण + F5 दबाकर उसी परिणाम को प्राप्त कर सकते हैं: यह डीबगर को संलग्न किए बिना एप्लिकेशन प्रारंभ करेगा।

+0

मैं इस उत्तर से पूरी तरह से संतुष्ट हूं। धन्यवाद – Przemen

संबंधित मुद्दे