XNA

2011-09-29 12 views
9

में पूरे स्क्रीन स्केलिंग XNA का उपयोग करना, मैं तुम्हें खेल है कि कैसे दिखते वे जल्दी 90 के दशक से बाहर गिर गई बनाने के लिए, मूंछ और सैम & अधिकतम हिट के दिवस की तरह देता है कि एक साहसिक खेल इंजन बनाने के लिए कोशिश कर रहा हूँ सड़क। इस प्रकार, मैं चाहता हूं कि गेम वास्तव में 320x240 पर चलाना चाहता है (मुझे पता है, यह शायद 320x200 होना चाहिए, लेकिन शाह), लेकिन इसे उपयोगकर्ता सेटिंग्स के आधार पर स्केल करना चाहिए।XNA

यह अभी ठीक तरह से काम करता है, लेकिन मैं कुछ समस्याओं में भाग रहा हूं जहां मैं वास्तव में इसे और पिक्सलेटेड देखना चाहता हूं जो वर्तमान में करता है।

खेल प्रारंभ में:

public Game() { 
     graphics = new GraphicsDeviceManager(this); 
     graphics.PreferredBackBufferWidth = 640; 
     graphics.PreferredBackBufferHeight = 480; 
     graphics.PreferMultiSampling = false; 

     Scale = graphics.PreferredBackBufferWidth/320; 
    } 

स्केल एक सार्वजनिक स्थैतिक चर है कि मैं कभी भी जांच कर सकते हैं देखने के लिए मुझे कितना पैमाने चाहिए मेरी खेल रिश्तेदार है

यहाँ अभी मैं क्या कर रहा हूँ 320x240 तक।

मेरी ड्राइंग समारोह में:

spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, SamplerState.PointClamp, DepthStencilState.Default, RasterizerState.CullNone, null, Matrix.CreateScale(Game.Scale)); 

इस तरह, सब कुछ 320x240 पर तैयार की गई है और वर्तमान संकल्प (640x480 डिफ़ॉल्ट रूप से) फिट करने के लिए उड़ा दिया है। और निश्चित रूप से मैं माउस के वास्तविक निर्देशांक को 320x240 निर्देशांक में परिवर्तित करने के लिए गणित करता हूं, और बहुत आगे।

अब, यह बहुत अच्छा और सब कुछ है, लेकिन अब मैं उस बिंदु पर जा रहा हूं जहां मैं अपने sprites स्केलिंग शुरू करना चाहता हूं, ताकि वे दूरी और आगे बढ़ सकें।

नीचे दी गई छवियों को देखें। ऊपरी-बाएं छवि 640x480 पर चल रही है जब से स्क्रीनशॉट का एक टुकड़ा है। इसके दाईं ओर की छवि यह है कि 320x240 पर इसे "देखना" चाहिए। छवियों की निचली पंक्ति केवल शीर्ष पंक्ति 300% तक बढ़ी है (फ़ोटोशॉप में, इंजन में नहीं) ताकि आप देख सकें कि मैं किस बारे में बात कर रहा हूं।

image showing the difference in scaling as the resolution changes

640x480 छवि, आप विभिन्न देख सकते में "रेखा मोटाई," मोटी रेखाएं हैं कि यह वास्तव में कैसे दिखना चाहिए (एक पिक्सेल = 2x2, क्योंकि यह 640x480 पर चल रहा है), लेकिन स्किनिंग के कारण पतली रेखाएं (1x1 पिक्सेल) भी दिखाई दे सकती हैं (दाएं छवियों को देखें)।

असल में मैं 320x240 डिस्प्ले का अनुकरण करने की कोशिश कर रहा हूं लेकिन एक्सएनए का उपयोग करके किसी भी संकल्प तक उड़ाया गया है, और मैट्रिक्स ट्रांसफॉर्मेशन चाल नहीं कर रहे हैं। क्या ऐसा करने के बारे में कोई रास्ता है?

उत्तर

14

वापस बफर के बजाय एक RenderTarget के मूल निवासी संकल्प में सब कुछ प्रस्तुत:

 SpriteBatch targetBatch = new SpriteBatch(GraphicsDevice); 
     RenderTarget2D target = new RenderTarget2D(GraphicsDevice, 320, 240); 
     GraphicsDevice.SetRenderTarget(target); 

     //perform draw calls 

फिर वापस बफर करने के लिए इस लक्ष्य (अपने पूरे स्क्रीन) प्रस्तुत करना:

 //set rendering back to the back buffer 
     GraphicsDevice.SetRenderTarget(null); 

     //render target to back buffer 
     targetBatch.Begin(); 
     targetBatch.Draw(target, new Rectangle(0, 0, GraphicsDevice.DisplayMode.Width, GraphicsDevice.DisplayMode.Height), Color.White); 
     targetBatch.End(); 
+1

धन्यवाद एक गुच्छा! मैंने आखिरी स्प्राइटबैच को एक कॉल किया था: स्प्राइटबैच.बजिन (स्प्राइटस्टोर्टमोड। डिफरर्ड, ब्लेंडस्टेट .ऑनप्रिमल्टीप्लाइड, सैम्पलरस्टेट.पॉइंटक्लैम्प, डेथस्टेंसिस्टस्टेट.डिफॉल्ट, रास्टरराइज़रस्टेट.कुलनोन); प्रक्षेपण को धुंधला नहीं दिखने के लिए, लेकिन यह बहुत अच्छा लग रहा है! एक बार फिर धन्यवाद! –

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