現在、XNA 4を使用して昔ながらのゲームを開発しています。グラフィックスアセットは568x320の解像度(16/9の比率)に基づいており、ウィンドウの解像度(たとえば、1136x640)を変更したいのですが、グラフィックスは拡大せずに拡大縮小されます。それらはピクセルアスペクトを維持します。
どうすればこれに到達できますか?
やばい !!!!私はそれを持っている !spriteBatch.BeginメソッドでSamplerState.PointClampを指定するだけで、そのクールなピクセルのvisueleffet<3を維持できます。
spriteBatch.Begin(SpriteSortMode.Immediate,
BlendState.AlphaBlend,
SamplerState.PointClamp,
null,
null,
null,
cam.getTransformation(this.GraphicsDevice));
RenderTarget
あなたはあなたの目標を達成するためにを使うことができます。考えられるすべての画面サイズに応じてレンダリングする必要はないようです。したがって、グラフィックがマウスなどの他のグラフィック機能に依存していない場合は、を使用してRenderTarget
すべてのピクセルデータを描画します。実際の画面に描画して、画面を引き伸ばすことができます。
この手法は他の方法でも使用できます。ゲームでオブジェクトを描画するために使用しているので、オブジェクトのすべてのスプライトを計算しなくても、回転と位置を簡単に変更できます。
例:
void PreDraw()
// You need your graphics device to render to
GraphicsDevice graphicsDevice = Settings.GlobalGraphicsDevice;
// You need a spritebatch to begin/end a draw call
SpriteBatch spriteBatch = Settings.GlobalSpriteBatch;
// Tell the graphics device where to draw too
graphicsDevice.SetRenderTarget(renderTarget);
// Clear the buffer with transparent so the image is transparent
graphicsDevice.Clear(Color.Transparent);
spriteBatch.Begin();
flameAnimation.Draw(spriteBatch);
spriteBatch.Draw(gunTextureToDraw, new Vector2(100, 0), Color.White);
if (!base.CurrentPowerUpLevel.Equals(PowerUpLevels.None)) {
powerUpAnimation.Draw(spriteBatch);
}
// DRAWS THE IMAGE TO THE RENDERTARGET
spriteBatch.Draw(shipSpriteSheet, new Rectangle(105,0, (int)Size.X, (int)Size.Y), shipRectangleToDraw, Color.White);
spriteBatch.End();
// Let the graphics device know you are done and return to drawing according to its dimensions
graphicsDevice.SetRenderTarget(null);
// utilize your render target
finishedShip = renderTarget;
}
あなたの場合、RenderTarget
568x320の寸法で初期化し、それに応じて描画し、他の可能なサイズについて心配しないことを忘れないでください。スプライトバッチにを与えRenderTarget
て画面に描画すると、画像が「引き伸ばされ」ます。
編集:
申し訳ありませんが、私は質問をざっと読み、結果を「引き伸ばす」ことを望まないことを見逃しました。RenderTarget
これは、グラフィックスデバイスに応じて指定した寸法にファイナルを描画することで実現できます。