2011-01-24 14 views
6

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

मैं इसे बिना खिंचाव के पूर्णस्क्रीन जाने के लिए कैसे प्राप्त कर सकता हूं और मुझे बिना किसी स्थिति को संशोधित करने और गेम में कथन बनाने की आवश्यकता क्यों है? कोड जो मैं व्यूपोर्ट्स के लिए उपयोग कर रहा हूं वह नीचे है।

  // set the viewport to the whole screen 
      GraphicsDevice.Viewport = new Viewport 
      { 
       X = 0, 
       Y = 0, 
       Width = GraphicsDevice.PresentationParameters.BackBufferWidth, 
       Height = GraphicsDevice.PresentationParameters.BackBufferHeight, 
       MinDepth = 0, 
       MaxDepth = 1 
      }; 

      // clear whole screen to black 
      GraphicsDevice.Clear(Color.Black); 

      // figure out the largest area that fits in this resolution at the desired aspect ratio 
      int width = GraphicsDevice.PresentationParameters.BackBufferWidth; 
      int height = (int)(width/targetAspectRatio + .5f); 
      if (height > GraphicsDevice.PresentationParameters.BackBufferHeight) 
      { 
       height = GraphicsDevice.PresentationParameters.BackBufferHeight; 
       width = (int)(height * targetAspectRatio + .5f); 
      } 
      //Console.WriteLine("Back: Width: {0}, Height: {0}", GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight); 
      //Console.WriteLine("Front: Width: {0}, Height: {1}", width, height); 

      // set up the new viewport centered in the backbuffer 
      GraphicsDevice.Viewport = new Viewport 
      { 
       X = GraphicsDevice.PresentationParameters.BackBufferWidth/2 - width/2, 
       Y = GraphicsDevice.PresentationParameters.BackBufferHeight/2 - height/2, 
       Width = width, 
       Height = height, 
       MinDepth = 0, 
       MaxDepth = 1 
      }; 

      GraphicsDevice.Clear(Color.CornflowerBlue); 

नीचे दी गई छवि से पता चलता है कि स्क्रीन कैसी दिखती है। किनारों पर काली वह है जो मैं चाहता हूं (और पहले व्यूपोर्ट से है) और दूसरा व्यूपोर्ट गेम और कॉर्नफ्लॉवर ब्लू एरिया है। मैं चाहता हूं कि कॉर्नफ्लॉवर नीले क्षेत्र को भरने के लिए गेम को स्केल करना है। 3 पहलू और 16: 9 पहलू

Not correctly scaling

+2

आपको यह जानने में रुचि हो सकती है कि वास्तव में गेम डेवलपमेंट स्टैक एक्सचेंज साइट है, जहां आपको इसके लिए बेहतर जवाब मिल सकता है: http://gamedev.stackexchange.com/ –

उत्तर

2
+0

जैसा कि मेरे प्रश्न में बताया गया है, वही है जो मैं कोशिश कर रहा हूं। मैं व्यूपोर्ट भरने के लिए अपना 2 डी गेम नहीं प्राप्त कर सकता हूं। यह बस फिट करने के बजाय स्केलिंग के बजाय शीर्ष बाएं हिस्से में बैठता है। – Califer

+0

ठीक है। ऐसा नहीं लगता था कि आपने * * व्यूपोर्ट का उपयोग किया था। ऊपर बाईं ओर बैठता है? क्या आपने व्यूपोर्ट के .X और .Y सदस्यों को सेट किया है? आपको स्क्रीन के व्यूपोर्ट को केंद्र में रखना होगा .. मतलब: आपको अपने पहलू अनुपात के लिए उचित ऊंचाई/चौड़ाई निर्धारित करने की आवश्यकता है। (इस मामले में स्क्रीन से संकुचित) और फिर इसे केंद्र। – stefan

+0

सही, मेरे पास एक व्यूपोर्ट है जो सिर्फ एक ब्लैक स्क्रीन बना रहा है, फिर एक केंद्रित व्यूपोर्ट जो मेरे पहलू अनुपात को फिट करता है। समस्या यह है कि वास्तविक गेम स्क्रीन केंद्रित व्यूपोर्ट फिट करने के लिए स्केल नहीं करती है। मैं सिर्फ कैमरे को नहीं ले सकता क्योंकि गेम पूरी तरह से 2 डी में है और मैंने कभी भी कैमरे को शुरू नहीं किया है। – Califer

0

के रूप में भी वाणिज्यिक खेलों में मामला है, तो आप उपयोगकर्ता है कि उन्हें 4 के बीच स्विच करने की अनुमति देता है के लिए एक विकल्प प्रदान करना चाहिए। आप तदनुसार कैमरा देखने के अनुपात को संशोधित करने में सक्षम होना चाहिए।

संपादित करें:

जहां तक ​​मैंने देखा है, वहाँ कोई खेल है कि 'स्वत: पता लगाएं' उचित पहलू अनुपात का उपयोग कर रहे हैं।

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

एक बार जब आप उपयोगकर्ता के मॉनीटर रिज़ॉल्यूशन को निर्धारित कर लेते हैं, तो आप सबसे अच्छा निर्णय ले सकते हैं कि इससे कैसे निपटें। सबसे पहले, सबसे अच्छी शर्त स्क्रीन के बाएं/दाएं तरफ काले रंग की सलाखों को सिर्फ 16: 9 पहलू अनुपात के साथ पूर्ण स्क्रीन की अनुमति देने के लिए हो सकती है जो अनिवार्य रूप से अभी भी 4: 3 आर्टवर्क का उपयोग कर रही है।

आखिरकार आप गेम को संशोधित कर सकते हैं ताकि पहलू अनुपात 16: 9 होने पर यह पोर्ट पोर्ट आकार को बदल सके। इसके लिए किसी भी कला संपत्ति को बदलने की आवश्यकता नहीं होगी, बस उन्हें कैसे प्रदान किया जा रहा है।

+0

जीटीए 4 में अच्छा ऑटो-डिटेक्ट –

+1

है उपयोगकर्ता के डेस्कटॉप रिज़ॉल्यूशन को देखकर अक्सर सही पहलू अनुपात का अनुमान लगाएं। – ChrisV

+0

दरअसल आप लोग शायद सही हैं; मुझे लगता है कि वे पहले अनुपात का अनुमान लगाते हैं लेकिन बाद में इसे बदलने देते हैं। – James

0

सब मैं तुम्हें XNA 4.0 है, जो AFAIK वहाँ XNA 3.x और XNA 4.0 के बीच परिवर्तन को तोड़ने के बारे में बात कर रहे हैं संभालने हूँ सबसे पहले प्रयोग करें।

मैं एक्सएनए में अपेक्षाकृत नया हूं, हालांकि मुझे लगता है कि आपकी संपत्ति खिड़की के आकार में फिट नहीं है। मान लें कि आपका गेम 320x240 है और आपकी विंडो बड़ी है उदा। 640x480।

इस प्रकार आप अपने आवेदन को बढ़ाने के लिए पसंदीदा Buffer निर्दिष्ट कर सकते हैं। तो, एक्सएनए को बताएं कि आप निम्न मानों को सेट करके 320x240 का उपयोग करने जा रहे हैं;

_graphics.PreferredBackBufferWidth = 320; 
_graphics.PreferredBackBufferHeight = 240; 

इसके अतिरिक्त आप की स्थापना द्वारा पूर्ण स्क्रीन मोड शुरू कर सकते हैं:

_graphics.IsFullScreen = true; 

इसके अलावा, आप मैन्युअल रूप से संभाल करने के लिए कैसे आइटम उनके आकार बदलना चाहिए एक बार खिड़की उनके आकार बदल गया है है।

मेरा नमूना चेकआउट करें। https://github.com/hmadrigal/xnawp7/tree/master/XNASample02

(BTW, आप के लिए F11 दबाएँ फुलस्क्रीन और सामान्य दृश्य के बीच स्विच करने के लिए कर सकते हैं)

सादर, Herber

+0

धन्यवाद, लेकिन यही वह है जो मैं पहले से कर रहा हूं जो इसे विभिन्न पहलू अनुपातों पर फैला रहा है। – Califer

0

मुझे यकीन है कि नहीं कर रहा हूँ अगर आप वास्तव में उस तरह आपके विचार बंदरगाह पैमाने पर कर सकते हैं। मैं समझता हूं कि आप क्या करने की कोशिश कर रहे हैं, लेकिन ऐसा करने के लिए आपको निम्न कार्य करना होगा। 9 संकल्प:

  1. 16 के लिए अपनी स्क्रीन backbuffer चौड़ाई और ऊंचाई सेट करें।
  2. विस्थापन में कार्यक्रम ताकि वस्तुओं को उन सीमाओं में आकर्षित न किया जाए।

बात है, सभी प्रमुख खेल इन दिनों, अगर तुम उन पर एक 16 खेलने: 9 मॉनिटर और एक 4 का चयन करें: 3 संकल्प, स्क्रीन फिट करने के लिए खिंचाव जाएगा। यह ऐसा कुछ नहीं है जिसे आप आमतौर पर पार करना चाहते हैं। आप या तो अपने गेम में कई संकल्पों का समर्थन करते हैं, या जब उपयोगकर्ता अपने स्क्रीन प्रकार के लिए गलत रिज़ॉल्यूशन का उपयोग करता है तो आप खींचेंगे।

आमतौर पर, कोई अपना गेम सेट करता है, और उनके बनावट वर्तमान व्यूपोर्ट या बैकबफर चौड़ाई और ऊंचाई के सापेक्ष आयामों के आधार पर काम करने के लिए काम करते हैं। इस तरह, संकल्प के बावजूद, उस चौड़ाई/ऊंचाई अनुपात के साथ काम करने के लिए गेम स्केल।

यह थोड़ा और काम है, लेकिन अंत में, आपके गेम को सिस्टम की विस्तृत श्रृंखला के साथ कहीं अधिक पॉलिश और संगत बनाता है।

यह एकमात्र समय नहीं किया जा सकता है यदि ऐप विंडो में चला जाता है (पूर्णस्क्रीन नहीं)।

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