在 XNA 中缩放整个屏幕

2024-02-29

我正在尝试使用 XNA 制作一个冒险游戏引擎,让您制作看起来像是 90 年代初期的游戏,例如触手之日 and 山姆和麦克斯上路。因此,我希望游戏实际以 320x240 运行(我知道,它可能应该是 320x200,但是嘘),但它应该根据用户设置进行缩放。

它现在工作得还不错,但我遇到了一些我真正希望它看起来的问题more目前的像素化。

这就是我现在正在做的事情:

游戏初始化时:

    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));

这样,所有内容都以 320x240 绘制,并放大以适合当前分辨率(默认为 640x480)。当然,我会进行数学运算,将鼠标的实际坐标转换为 320x240 坐标,依此类推。

现在,这一切都很棒,但现在我想要开始缩放我的精灵,让它们走到远处等等。

看看下面的图片。左上图是游戏以 640x480 运行时的屏幕截图。右边的图像是它“应该”的样子,分辨率为 320x240。底行图像只是将顶行放大到 300%(在 Photoshop 中,而不是在引擎中),因此您可以看到我在说什么。

在 640x480 图像中,您可以看到不同的“线条粗细”;较粗的线条是它真正的样子(一个像素 = 2x2,因为这是在 640x480 下运行),但较细的线条(1x1 像素)也会出现,但由于缩放,它们不应该出现(请参见右侧的图像) )。

基本上,我试图模拟 320x240 显示器,但使用 XNA 放大到任何分辨率,而矩阵转换并不能解决问题。我有什么办法可以做到这一点吗?


将所有内容以原始分辨率渲染到 RenderTarget 而不是后台缓冲区:

        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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 XNA 中缩放整个屏幕 的相关文章

  • FPS 极低,我应该使用什么分析应用程序来查找性能问题?

    我正在创建 XNA 游戏 但得到了意想不到的结果 FPS 极低 大约 2 12 fps 我应该使用什么程序来测试性能并找出导致性能下降的原因 你有没有尝试过使用SlimTune http code google com p slimtune
  • 在 Windows 窗体用户控件中嵌入 XNA 游戏

    我写了一个简单的 XNA 4 0 游戏 我想制作一个 Windows 窗体用户控件来渲染此游戏 并向 XNA 提供必要的交互反馈 键盘和鼠标 我已经尝试过以下方法 In XNA 将 XNA 的 Game GraphicsDevice 重定向
  • Monogame:WAV 无法播放

    这是 MonoGame 3 4 我通过 VS2013 使用它 我正在使用 mgcb 编译我的 WAV 文件 就像我的纹理一样 MGCB 工作正常 但是当涉及到使用SoundEffect类 它不播放任何内容 没有例外并且SoundEffect
  • xna 中的大型多人游戏

    您对 xna 和大型多人游戏有何看法 例如服务器和 100 个客户端 有没有关于如何在 xna 中创建客户端服务器应用程序的好教程 当然有关于如何做到这一点的教程 我个人使用 Lidgren 作为我的在线原型 我只对 4 个人进行了测试 服
  • 无法将资源加载为 XML 文件

    我已经使用 XNA 完成了我的项目 目前我正在尝试使用 Monogame 对其进行转换 我的问题是我无法加载 XML 文件 错误 Could not load Level asset as a non content file 我的代码 f
  • XNA 中的四元数旋转

    我这样做对吗 显然不是因为否则我不会在这里发布问题 但我正在尝试围绕另一个模型对一个模型进行四元数旋转 假设我有一个具有向量 3 位置和浮动旋转角度的盒模型 我还有一个指向盒子模型的截头锥体模型 其位置可以说距盒子模型 50 个单位 平截头
  • 如何为我的 C# XNA 游戏制作 GUI? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的游戏有基本功能 可以通过命令行玩 但我想在它上面放一个 GUI 它是一款使用 C 和 XNA 框架编写的平台游戏 我用谷歌搜索并找
  • 如何在 XNA 中暂停重绘?

    我制作了一个 XNA 图像查看器 但它总是重新绘制场景 即使它没有改变 而且它让我的上网本烧得很厉害 所以我希望它在没有任何变化时暂停绘制 将帧速率降低到 1 是保持凉爽的一种方法 但会导致输出滞后 如何在没有输入的情况下防止重绘 这个问题
  • 为什么 Visual Studio 无法打开 .csproj 文件?

    我遇到一个奇怪的问题 即无法在 Visual Studio 中打开 NET 项目的属性 如果我尝试通过单击解决方案资源管理器中的 属性 树节点来打开它 我会收到以下消息 没有可用于 csproj 的编辑器 确保已安装文件类型 csproj
  • 当焦点被移除时,XNA 运行缓慢

    我只是想知道 在制作游戏时 我注意到当我的游戏具有焦点时 就像它应该的那样 IsRunningSlowly 的 GameTime 值返回 false 但是当我更改应用程序时 它会更改为 true 我什至制作了一个空游戏 即使它失去焦点 Is
  • 2D XNA 游戏鼠标点击

    我有一个 2D 游戏 其中仅使用鼠标作为输入 我怎样才能做到这一点 以便当鼠标悬停在 Texture2D 对象上时 Texture2D 和鼠标光标会发生变化 并且当单击纹理时 它会移动到另一个位置 简而言之 我想知道当我将鼠标悬停在或单击
  • Flex:跨分辨率应用

    What is the best way to create applications in Flex AIR which look and feel the same irrespective of the screen resoluti
  • xna 防止下坡或上太陡的山

    如何防止在高度图地形上过于陡峭的斜坡或上山 我有一个可以在地形上移动的 3D 相机 它现在可以在任何地方移动 甚至在大斜坡和太陡的山丘上 我该怎么办 如果你试图朝一个方向移动 你应该预测你最终会到达哪里 然后弄清楚是否slope http
  • 如何在 Visual Studio 11 Beta 中使用 XNA 项目?

    Visual Studio 11 几周前发布 现在ReSharper 可用 http blogs jetbrains com dotnet 2012 03 resharper 70 eap visual studio 11 beta edi
  • XNA 2D 矢量角度 - 正确的计算方法是什么?

    在 2D 中的 XNA 中矢量角度的标准工作方式是什么 向右 0 度 向上 90 度 向左 180 度 向下 270 度 什么是 标准 实现 float VectortoAngle Vector2 vec and Vector2 Angle
  • SoundEffect 和 SoundEffectInstance 类之间的区别

    就像有问题一样 我不明白使用这些类有什么区别 每个类别的优点和局限性是什么 我读了很多教程 但仍然无法决定我应该做什么 为了让事情更清楚 我得到了 AudioModule AudioEmitterComponent 和 AudioListe
  • 确保应用程序独立于用户的屏幕分辨率

    有没有简单的方法可以在任何不同的 PC 上运行在 Visual Studio 2005 上用 C 创建的应用程序 无论其屏幕分辨率如何 屏幕分辨率 NET 2 0 中的 Windows 窗体具有一些处理不同 DPI 的机制 并且具有比 NE
  • 如何在 C# + XNA 中将音调更改为超过 1 或 -1?

    我需要拥有比 2 个八度音阶更多的自由来创建我想要的东西 但 XNA 却做不到 我确实意识到可能没有办法让程序接受更大 更小的值 但是有没有办法解决它 就像以最低音调发出声音 然后创建一个新的声音 这样我就可以降低它更多 None
  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • Windows 窗体和 XNA - 绘制不是实时的

    我目前正在为 XNA 开发一个关卡编辑器 它是通过结合 Windows 窗体和 XNA 构建的 我正在使用 App Hub 上示例中的内容链接文本 http create msdn com en US education catalog s

随机推荐

  • AndroidrelativeLayoutalignTop不起作用

    我正在尝试在RelativeLayout 中使用alignTop 属性 以便将文本设置在个人资料图片的右侧 与图片的顶部对齐 这是我的布局
  • 将文本添加到 DataGridView 行标题

    C 是否允许将字符串添加到 DataGridView 中的 RowHeader 如果是的话 是如何实现的呢 我正在编写一个 Windows 窗体来显示今年迄今为止的客户付款数据 ColumnHeaders 显示一月 二月 三月等 而不是有一
  • 如何避免 JavaScript 中的短路求值?

    我需要执行两边 声明 但如果第一部分返回 则不会发生这种情况false 例子 function doSomething x console log x function checkSomething x var not1 x 1 if no
  • 如何保护客户端/服务器套接字通信的安全

    假设客户端和服务器应用程序在不同的计算机上运行 Today Server will receive the request and cast it as needed ProxyResponse message ProxyResponse
  • docker buildx“执行用户进程导致:执行格式错误”

    我正在尝试交叉编译一个 Rust 应用程序以在我的树莓派集群上运行 我看到 docker 的 buildx 应该能够使这成为可能 我现在有一个最小的 dockerfile 如下所示 FROM rust RUN apt get update
  • 在本地工作的 R 脚本不适用于shinyapp.io

    我正在尝试组装一个 R Shiny 应用程序 至少在最初 它可以绘制日期数据的直方图 我让它在 RStudio 的本地系统上工作得很好 但在闪亮的应用程序 io 中它不起作用 目前 该应用程序非常简单 用户界面实际上没有做任何事情 数据只是
  • Jupyter 上 Sparkcollect() 的 IllegalArgumentException

    我设置了 Jupyter 4 3 0 Python 3 6 3 Anaconda 和 PySpark 2 2 1 以下示例在通过 Jupyter 运行时将失败 sc SparkContext getOrCreate rdd sc paral
  • 如何获取两个列表之间的所有唯一分配

    我有两个列表 每个列表都可以包含重复的值 但任何值只能出现在这两个列表之一 或没有 中 A 0 1 B 2 3 我想获得这两个列表之间的所有唯一映射 assignment A B 0 2 1 3 0 3 1 2 我知道这可以例如使用 ite
  • 如何解决 MSCV 中 Boost 文件系统库的 LNK1104 错误?

    我无法将我的项目链接到 Microsoft Visual C 2008 Express Edition 中的 Boost 版本 1 37 0 文件系统 lib 文件 文件系统库是not仅标头库 我一直在关注Windows 入门 http w
  • 如何处理pygame中不同组件的时间

    我正在制作一个 pygame 游戏 人们可以从商店购买炸弹 玩家还可以投下购买的炸弹数量 我需要一种方法让每个炸弹在投下 3 秒后消失 在下面的代码中 我只能投下炸弹 但是我尝试了各种方法但失败了 import pygame import
  • 使用 .NET Core 的 Linux/Unix 上的文件权限

    我正在尝试学习如何使用 NET Core 在 Linux Unix 上设置文件权限 我已经在这里发现了一个问题 它指出了 System IO FileSystem 的方向 但我似乎找不到任何有关如何使用它的文档 简而言之 我想从仅在 Lin
  • 在 React Native 应用程序中发送应用程序邀请

    在 facebook iOS SDK 中 有一个名为 App Invites 的模块 允许将您的应用程序的邀请发送给您的朋友 https developers facebook com docs ios https developers f
  • sstream 重新声明并出现公共访问编译器错误

    我在使用 gcc5 4 0 在大型项目上运行 make 时遇到了此错误 usr include c 5 sstream 300 14 error xfer bufptrs redeclared with public access stru
  • gensim 的 get_document_topics 方法返回的概率加起来不等于 1

    有时它返回所有主题的概率并且一切都很好 但有时它只返回几个主题的概率并且它们加起来不等于一 似乎这取决于文档 一般来说 当它返回很少的主题时 概率加起来大约为 80 那么它只返回最相关的主题吗 有没有办法强制它返回所有概率 也许我遗漏了一些
  • \t 只被视为 1 个字符吗?

    我试图用 do while 和子字符串来做一些基本逻辑 如下所示 bool foundFirstTaskname false int startCounter 0 do var checkEveryTwo name Substring st
  • 这是内置的绘图吗?

    In 这个链接的图像 http snpent com images button gif 我在很多应用程序中经常看到右侧的按钮 在我的 Moto Droid 上 它在设置应用程序中广泛使用 它还用作默认的 AlertDialog 图标 我可
  • 如何告诉 Clang 不要冒充其他编译器?

    我过去遇到过这个问题 LLVM 定义 GNUC https www google com search q 22 GNUC 22 LLVM bug 但它不能使用 GCC 可以使用的程序 我在 Windows 上再次遇到它 LLVM 定义 M
  • 如何禁用 Eclipse 中的格式化符号?

    由于所有格式符号 我实际上什么也看不到 我不知道那是什么热键 但我找不到任何解决方案如何禁用这些符号 你知道是否有热键吗 我不记得那个热键是什么了 You can also disable them by using this button
  • 如何将 pt 转换为 em?

    如何将 pt 转换为 em 因为我使用 Photoshop 来设计模板 软件的文本大小采用 pt 格式 然后我必须将设计细节传输给开发人员 他们总是需要 em 格式的所有文本大小 我参考了这个网站http pxtoem com http p
  • 在 XNA 中缩放整个屏幕

    我正在尝试使用 XNA 制作一个冒险游戏引擎 让您制作看起来像是 90 年代初期的游戏 例如触手之日 and 山姆和麦克斯上路 因此 我希望游戏实际以 320x240 运行 我知道 它可能应该是 320x200 但是嘘 但它应该根据用户设置