2009-06-09 13 views
37

जब DirectX अनुप्रयोगों लेखन, स्पष्ट रूप से यह Alt के माध्यम से उपयोगकर्ता आवेदन निलंबित समर्थन करने के लिए वांछनीय है - एक तरीका है कि है में टैब तेजी और त्रुटि मुक्त। यह सुनिश्चित करने के लिए प्रथाओं का सबसे अच्छा तरीका क्या है? जिन चीज़ों को संबोधित करने की आवश्यकता है उनमें शामिल हैं:डायरेक्टएक्स ऐप में Alt-Tab समर्थन के लिए सर्वोत्तम अभ्यास?

  1. यह पता लगाने का सर्वोत्तम तरीका है कि आपका एप्लिकेशन कब से बाहर हो गया है और जब इसे वापस कर दिया गया है।
  2. उपयोगकर्ता ऑल्ट-टैब, और इससे निपटने के सर्वोत्तम तरीकों के दौरान कौन सी डायरेक्टएक्स संसाधन खो जाते हैं।
  3. ऑल्ट-टैब समर्थन के प्रयोजनों के लिए प्रमुख कार्य करने और अनुप्रयोग आर्किटेक्चर में चीजों से बचने के लिए चीजें।
  4. उपरोक्त पर लागू होने वाले प्रमुख डायरेक्टएक्स संस्करणों के बीच कोई महत्वपूर्ण अंतर।

दिलचस्प चाल और गॉथस भी सुनना अच्छा है।

+50

कृपया वाल्व ;-) – ebo

+3

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

+0

यह सुनिश्चित नहीं है कि आप वाल्व पर क्यों चुन रहे हैं। हाफ-लाइफ उन पहले गेमों में से एक था जो मैंने बिना किसी समस्या के alt-tab किया था। यदि कोई समस्या है तो संभवतः डायरेक्टएक्स के कारण (एचएल ने मेरे सेटअप पर ओपनजीएल का इस्तेमाल किया) – SpliFF

उत्तर

42

मैं तुम्हें अपने जवाब के प्रयोजनों के लिए C++ का उपयोग कर रहे समझेंगे, लेकिन आप सी #, XNA उपयोग करने के लिए खर्च कर सकते हैं, तो (http://creators.xna.com/) आप के लिए इन सभी मुद्दों को संभालती है एक उत्कृष्ट खेल मंच है। http://www.functionx.com/win32/Lesson05.htm:

1]

यह लेख खिड़की प्रक्रिया जब एक खिड़की खो देता है या लाभ ध्यान देते हैं, तो आप अपने मुख्य विंडो पर इस संभाल सकता का पता लगाने के खिड़कियों की घटनाओं के लिए उपयोगी है। इसके अलावा, यहां WM_ACTIVATEAPP संदेश की जाँच: http://msdn.microsoft.com/en-us/library/ms632614(VS.85).aspx

2]

  • ग्राफिक्स डिवाइस खो गया जब आवेदन पूर्ण स्क्रीन मोड से ध्यान केंद्रित खो देता है। http://msdn.microsoft.com/en-us/library/bb174717(VS.85).aspx यह लेख भी खोए हुए डिवाइस को ट्यूटोरियल है: http://www.toymaker.info/Games/html/directinput.html

  • डायरेक्टसाउंड: http://www.codesampler.com/dx9src/dx9src_6.htm

  • DirectInput भी डिवाइस खो त्रुटि राज्य हो सकता है, यहां इस बारे में एक कड़ी है माइक्रोसॉफ्ट यह कैसे संभाल करने पर एक लेख प्रदान करता है यह भी एक उपकरण खो त्रुटि राज्य हो सकता है, इस लेख कोड है कि संभालती है: http://www.eastcoastgames.com/directx/chapter2.html

3]

मैं सुनिश्चित करता हूं कि कभी भी Alt-Tab को अक्षम न करें। आप शायद न्यूनतम सीपीयू लोड चाहते हैं जबकि एप्लिकेशन सक्रिय नहीं है क्योंकि उपयोगकर्ता शायद Alt-Tabbed क्योंकि वे कुछ और करना चाहते हैं, ताकि आप एप्लिकेशन को पूरी तरह से रोक सकें, या प्रति सेकेंड दिए गए फ्रेम को कम कर सकें। यदि आवेदन कम हो गया है, तो निश्चित रूप से आपको कुछ भी प्रस्तुत करने की आवश्यकता नहीं है। नेटवर्क गेम के बारे में सोचने के बाद, मेरा सबसे अच्छा समाधान यह है कि आपको प्रति सेकंड प्रदान किए गए फ्रेम को कम करना चाहिए और साथ ही साथ नेटवर्क पैकेटों की संख्या को कम करना चाहिए, संभवतः गेम को फिर से सक्रिय होने तक आने वाले कई पैकेटों को फेंकना चाहिए।

4]

ईमानदारी से मैं सिर्फ DirectX 9 से चिपक जाएगा।http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

+1

आपका उत्तर बहुत ठोस लगता है; धन्यवाद! मेरा मानना ​​है कि प्रतीक्षा अवधि समाप्त होने पर मैं इस सवाल को उदारता के लिए तैयार करने जा रहा हूं, क्योंकि मेरा मानना ​​है कि यह एक महत्वपूर्ण विषय है जिसमें सुसंगत संसाधनों की कमी है। यदि आप अपने उत्तर में कोई और संपादन करने के इच्छुक हैं, तो मैं विभिन्न लिंक से उच्च अंक सारांशित करने का सुझाव दूंगा; यह अच्छा होगा अगर कोई इस विषय की तलाश में उत्तर में व्यवहार्य अधिकार के रूप में अधिक प्रासंगिक जानकारी प्राप्त कर सके। (और लिंक, निश्चित रूप से, लिंक्रॉट के लिए कमजोर हैं।) – chaos

+0

अच्छा ऊर्ध्वाधर प्रतिष्ठा ग्राफ। आप काफी बाउंटी शिकारी हैं। :) – chaos

+0

हाँ, हैरान है कि उनके पास बैज नहीं है! – jjxtra

1

DX8 में और 9 (: 0C यदि संभव हो :)

अंत में, DirectX एसडीके कई ट्यूटोरियल और नमूने (या DirectX 10 यदि आप Vista करने के लिए अपने लक्ष्य ऑपरेटिंग सिस्टम को सीमित करने और नए चाहते हैं) और 10?) यदि आप अपने संसाधन (वर्टेक्स और इंडेक्स बफर और मुख्य रूप से बनावट) बनाते हैं तो D3DPOOL_MANAGED का उपयोग करके वे खोए गए डिवाइसों पर बने रहेंगे और उन्हें पुनः लोड करने की आवश्यकता नहीं होगी। ऐसा इसलिए है क्योंकि वे सिस्टम मेमोरी और डीएक्स रनटाइम प्रतियों में स्वचालित रूप से वीडियो मेमोरी में संग्रहीत होते हैं। हालांकि प्रतिलिपि के कारण प्रदर्शन लागत है और तेजी से बदलते वर्टेक्स डेटा के लिए इसकी अनुशंसा नहीं की जाती है। बेशक आप यह निर्धारित करने के लिए पहले प्रोफाइल करेंगे कि कोई गति समस्या है या नहीं :-)

2

हमने इसे पूर्णस्क्रीन डायरेक्टएक्स डिवाइस का उपयोग न करके हल किया - इसके बजाय हमने शीर्ष-ध्वज के साथ एक पूर्ण-स्क्रीन विंडो का उपयोग किया यह टास्क बार छुपाता है। यदि आप उसमें से Alt-Tab से बाहर हैं, तो आप ध्वज को हटा सकते हैं और विंडो को कम कर सकते हैं। बनावट संसाधन खिड़की से जीवित रखा जाता है।

हालांकि, यह दृष्टिकोण 'लॉक स्क्रीन', Ctrl + Alt + Delete, दूरस्थ डेस्कटॉप कनेक्शन, उपयोगकर्ता स्विचिंग या इसी तरह के कारण होने वाली डिवाइस खोने वाली घटना को संभाल नहीं करता है। लेकिन उन्हें बेहद तेज़ या कुशलता से संभालने की आवश्यकता नहीं है (कम से कम हमारे आवेदन में यह मामला था)

2

सभी गंभीर डी 3 डी ऐप्स खोए गए उपकरणों को संभालने में सक्षम होना चाहिए क्योंकि यह ऐसा कुछ है जो विभिन्न प्रकार के लिए हो सकता है कारणों।

विस्टा के तहत डीएक्स 10 में एक नई "टाइमआउट डिटेक्शन और रिकवरी" सुविधा है जो ग्राफिक्स उपकरणों को रीसेट करने के मेरे अनुभव में आम है जो आपके ऐप के लिए खोए गए डिवाइस का कारण बनती है। यह ड्राइवरों के रूप में परिपक्व होने लगता है लेकिन आपको वैसे भी इसे संभालने की आवश्यकता है।

+0

सबसे अच्छा 'खोया डिवाइस', ड्राइवर अपग्रेड के कारण होता है ;-) –

+0

चोरलेट chortle लेकिन गंभीरता से। संदर्भ स्विचिंग को संभालने में सक्षम होने और राज्य को रीसेट करने में सक्षम होने के कारण मल्टीटास्किंग वातावरण में एक मजबूत अनुप्रयोग बनाने का एक महत्वपूर्ण हिस्सा है। –

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