2011-09-29 98 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)); 

這樣,一切都在320×240繪製並炸燬,以適應當前的分辨率(默認爲640×480)。當然,我做數學將鼠標的實際座標轉換爲320x240座標,等等。

現在,這是偉大的,所有,但現在我正在開始擴大我的精靈,讓他們走到遠處等等。

看看下面的圖片。左上角的圖像是遊戲以640x480運行時的截圖。右邊的圖像是它應該看起來如何,在320x240。底部的一排圖像只是最高達300%(在Photoshop中,不在引擎中),所以你可以看到我在說什麼。

image showing the difference in scaling as the resolution changes

在640×480的圖像,你可以看到不同的 「線寬」;較粗的線是它應該看起來的樣子(一個像素= 2x2,因爲它運行在640x480),但是較細的線(1x1像素)也會出現,當它們不應該時,由於縮放(請參閱右側的圖像)。

基本上我試圖模仿一個320x240的顯示器,但炸到使用XNA的任何分辨率,而矩陣轉換沒有做到這一點。有什麼辦法可以做到這一點?

回答

14

渲染的原始分辨率一切的渲染目標,而不是後臺緩存:

 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

感謝一大堆!我做了最後一個SpriteBatch調用:spriteBatch.Begin(SpriteSortMode.Deferred,BlendState.NonPremultiplied,SamplerState.PointClamp,DepthStencilState.Default,RasterizerState.CullNone);爲了使投影看起來不模糊,但它看起來很棒!再次感謝! –