在 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 中缩放整个屏幕 的相关文章

  • 在调试模式下抛出异常,但是在哪里?

    mscorlib ni dll 中发生了 System IO IsolatedStorage IsolatedStorageException 类型的第一次机会异常 不允许对isolatedStorageFileStream 进行操作 它向
  • 似乎无法从 Windows Phone 7 中的 TouchPanel 获得触摸输入

    我已经在 Visual Studio 中启动了一个新项目 并一直在尝试使用静态 TouchPanel 类来获取输入 我已通过 EnabledGestures 属性启用了 点击 手势 但是当我点击屏幕时 手势未注册 即 TouchPanel
  • XNA C# 2D 平台游戏

    我正在尝试在 XNA 中制作 弄清楚如何 一个 2d 平台游戏 我知道如何创建平铺网格以及如何执行碰撞检测 我对玩家的 9 个边界图块执行碰撞检测 但我想知道是否有更好的方法来执行碰撞检测 我读过 时空幻境 不使用图块 而是使用拼凑的图像或
  • 启动前检查 .NET 依赖项

    我有几个正在开发的应用程序 并且喜欢将其分发给需要 Microsoft 提供的 dll 和 或框架的朋友 具体来说 XNA 我厌倦了从他们那里收到说 它崩溃了 的电子邮件 而实际上 发生的只是他们没有安装 XNA 或 NET 3 5 或其他
  • 在 XNA 中使用 HTML/CSS 作为 UI?

    有没有办法使用 HTML CSS 来做 XNA 游戏的用户界面 我需要以编程方式更新 HTML 以及处理事件 或者我应该使用另一个框架 该线程看起来很有希望 XNA 的 UI 库 https stackoverflow com questi
  • XNA 在运行时在 Texture2D 上绘制/绘制

    早安 如果你所在的地方是早上的话 我一直在环顾四周 但没有找到令人满意的方法 所以我想我会四处询问 理想的世界我希望能够生成一个透明的Texture2D对象 将其绘制到屏幕上我希望能够 绘制 它 即当鼠标左键按下时 光标所在的任何像素都应设
  • 笛卡尔坐标到极坐标(3d 坐标)

    如何在 3D 空间中的笛卡尔坐标系和极坐标系 以及反坐标系 之间进行转换 最好有一个 C 示例 但任何内容都将不胜感激 谢谢 Edit当考虑20 的变化时 不形成球体 Edit 2 private void Spherise for int
  • XNA DrawString() 仅绘制部分字符串

    我有一个问题DrawString in XNA 我使用多个SpriteBatches对于几个逻辑层 例如 背景 对象 菜单等 在我的菜单批处理中 我绘制了一个菜单 背景中的大灰色框 按钮 菜单上较小的灰色框 以及按钮的字符串 问题 http
  • “按 Enter 开始游戏” XNA 简介屏幕

    我创建了一个介绍屏幕 其中包含 按 Enter 开始游戏 然后退出 当然退出没有问题 但让游戏开始有点困难 有什么建议吗 最简单的方法是设置状态机 看起来真的很简单 enum GameState TitleScreen 0 GameStar
  • XNA 抽签:在整个游戏中使用一个 spritebatch

    我正在开发一款 XNA 游戏 现在是我仔细考虑架构的时候了 直到今天 我一直以这种方式实现我自己的绘制方法 public void Draw SpriteBatch sb GameTime gameTime sb Begin to draw
  • XNA:当前顶点声明不包括当前顶点着色器所需的所有元素。 Normal0 缺失

    嘿 我遇到了一点麻烦 我使用 xna 已经有一段时间了 但我对 3D 完全陌生 我正在逐字跟踪 msdn 网站上 winformsgraphicsdevice 示例中的代码 它有一个可以在屏幕上绘制一个原始三角形的控件 就这么简单 但我在这
  • 如何计算 2D 游戏中 SCREEN 到 WORLD 的位置

    我有这个类 我用它在我的 2D 游戏中绘制精灵 using Microsoft Xna Framework using Microsoft Xna Framework Graphics using Microsoft Xna Framewo
  • 如何在 XNA 中暂停重绘?

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

    我有一个 Texture2D 的二维数组 它在该数组中保存地图的不同部分 不过 我有一个问题 当我运行游戏时 地图绘制正确 但由于某种原因 数组 0 0 纹理重叠了我的所有纹理 包括我的玩家纹理和鼠标纹理 当我的鼠标和玩家纹理正确重叠地图时
  • C# XNA Visual Studio:“发布”和“调试”模式之间的区别?

    我正在制作一个有关碰撞检测的演示 这方面的一些代码很详细here https stackoverflow com questions 2343789 c xna optimizing collision detection 在调试模式下 它
  • 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
  • WP7 XNA 显示 3D FBX 模型

    我只是初学者 很抱歉我的愚蠢问题 我的模型看起来像这样 http img265 imageshack us img265 8291 clipboard01ap jpg http img265 imageshack us img265 829
  • 如何减慢或停止 XNA 中的按键速度

    我已经开始使用 XNA 框架编写游戏 并且遇到了一些我不知道如何正确解决的简单问题 我使用Texture2D 显示菜单并使用键盘 或游戏手柄 更改所选的菜单项 我的问题是当前用于在菜单项之间切换的功能太快了 我可能会单击向下按钮 它会向下移
  • XNA 数字锁定影响输入

    我有一个中断 在键盘按键上给我协调键 当数字锁打开时 按键会显示为 Numpad1 Numpad2 等 当数字锁关闭时 数字键盘键会变成 End Left Right Up PageLock 我不能让这种情况发生 因为我需要将这些键 左 右

随机推荐

  • 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 但是嘘 但它应该根据用户设置