2011-09-29 14 views
9

で画面全体をスケーリング、私は触手とサム&最大ヒットの日のように、あなたは、彼らは90年代初頭から落ちたように見えるゲームを作ることができますアドベンチャーゲームエンジンを作るしようとしています道路。したがって、私は実際にゲームを320x240で実行したい(私は知っている、おそらく320x200だが、shh)が、ユーザーの設定に応じてスケールアップする必要があります。XNAを使用してXNA

今は大丈夫ですが、私は実際に見たいいくつかの問題に取り組んでいます詳細 pixellated現在それはありません。ここで

は、私が今やっているものです:

ゲームの初期設定では:

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ではエンジンではありません)ので、私の話を見ることができます。 640×480の画像で

image showing the difference in scaling as the resolution changes

、あなたは別の「線の太さを、」見ることができます太い線は実際にどのように見えるか(1ピクセル= 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.Begin(SpriteSortMode.Deferred、BlendState.NonPremultiplied、SamplerState.PointClamp、DepthStencilState.Default、RasterizerState.CullNone)という最後のSpriteBatch呼び出しを作成しました。投影がぼやけて見えないようにするために、それは素晴らしいです!再度、感謝します! –

関連する問題