精灵在视口内扭曲
Sprites distorted within viewport
我对 Viewport 的理解是它在指定的位置和尺寸处裁剪屏幕区域。
我有一个大型 2D 瓦片地图,需要裁剪以仅在屏幕的较小方形区域内显示,以便仅查看较大地图的该区域。
然而,在使用以下代码实现视口后,在视口有效时绘制的任何精灵都会高度扭曲,就好像整个原始屏幕尺寸正在缩小以适应视口尺寸。
public override void Draw(GameTime gameTime_) {
SpriteBatch spriteBatch = screenManager.spriteBatch;
spriteBatch.Begin(SpriteSortMode.Immediate,BlendState.AlphaBlend,SamplerState.PointClamp,DepthStencilState.Default,RasterizerState.CullNone);
//draw panel
spriteBatch.Draw(minimapPanelGfx,new Vector2(panelX,panelY),Color.White);
//set up and activate viewport
Viewport mapView = new Viewport(panelX+88,panelY+55,260,260);
Viewport origView = TQGame.graphics.GraphicsDevice.Viewport;
TQGame.graphics.GraphicsDevice.Viewport = mapView;
//draw minimap (simplified as example)
spriteBatch.Draw(minimapGfx,new Vector2(panelX+100,panelY+100),Color.White);
//restore original fullscreen viewport
TQGame.graphics.GraphicsDevice.Viewport = origView;
//
spriteBatch.End();
}
虽然所需的地图显示应该保持未缩放,但视口地图显示被压缩到视口的左上侧。我想要实现的是只绘制落在视口边界内的全比例地图区域。非常感谢对此问题的任何帮助。
--
已解决:我想到将视口代码放在 SpriteBatch 代码之外,现在它按预期工作了。 :)
我想到将视口代码放在 SpriteBatch 代码之外,现在它按预期工作了。 :)
我对 Viewport 的理解是它在指定的位置和尺寸处裁剪屏幕区域。 我有一个大型 2D 瓦片地图,需要裁剪以仅在屏幕的较小方形区域内显示,以便仅查看较大地图的该区域。 然而,在使用以下代码实现视口后,在视口有效时绘制的任何精灵都会高度扭曲,就好像整个原始屏幕尺寸正在缩小以适应视口尺寸。
public override void Draw(GameTime gameTime_) {
SpriteBatch spriteBatch = screenManager.spriteBatch;
spriteBatch.Begin(SpriteSortMode.Immediate,BlendState.AlphaBlend,SamplerState.PointClamp,DepthStencilState.Default,RasterizerState.CullNone);
//draw panel
spriteBatch.Draw(minimapPanelGfx,new Vector2(panelX,panelY),Color.White);
//set up and activate viewport
Viewport mapView = new Viewport(panelX+88,panelY+55,260,260);
Viewport origView = TQGame.graphics.GraphicsDevice.Viewport;
TQGame.graphics.GraphicsDevice.Viewport = mapView;
//draw minimap (simplified as example)
spriteBatch.Draw(minimapGfx,new Vector2(panelX+100,panelY+100),Color.White);
//restore original fullscreen viewport
TQGame.graphics.GraphicsDevice.Viewport = origView;
//
spriteBatch.End();
}
虽然所需的地图显示应该保持未缩放,但视口地图显示被压缩到视口的左上侧。我想要实现的是只绘制落在视口边界内的全比例地图区域。非常感谢对此问题的任何帮助。
--
已解决:我想到将视口代码放在 SpriteBatch 代码之外,现在它按预期工作了。 :)
我想到将视口代码放在 SpriteBatch 代码之外,现在它按预期工作了。 :)