Спрайты искажены в окне просмотра - PullRequest
1 голос
/ 03 октября 2019

Мое представление о 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, и теперь он работает какпредназначены. :)

1 Ответ

2 голосов
/ 06 октября 2019

Мне пришло в голову поместить код области просмотра вне кода SpriteBatch, и теперь он работает, как задумано. :)

...