我对视口的理解是,它会在指定的位置和尺寸处裁剪屏幕区域。我有一个较大的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(); }
尽管所需的地图显示应保持未缩放比例,但视口的地图显示会压缩到视口的左上侧。我要实现的只是绘制全比例尺地图中视口边界内的区域。对这个问题的任何帮助将不胜感激。
-
SOLVED
:我想到将视口代码放在SpriteBatch代码之外,现在它可以正常工作了。 :)我对视口的理解是,它会在指定的位置和尺寸处裁剪屏幕区域。我有一个较大的2D瓷砖地图,该地图需要裁切才能仅在较小的正方形内显示...
我想到将视口代码放置在SpriteBatch代码之外,现在它已按预期工作。 :)