PC 上 XNA 中的信箱和缩放

2024-06-29

有没有一种方法可以让我基本上以 1080p(或 720p)作为默认分辨率来开发 XNA 游戏,然后根据设置的分辨率将游戏中的所有内容缩放到适当的大小,而不必在每个 Sprite 中设置缩放因子Draw() 方法?

我的想法是,我可以基于 1080p 的分辨率开发所有图形、配置坐标等,但对于 XBOX,只需将分辨率设置为 720p 并缩小(这样 XBOX 就会将所有内容视为 720,因此可以处理开发人员文档中提到的所有分辨率)以及在 PC 规模上通过自动对非 16:9 分辨率的视图进行信箱处理来达到任何所需的分辨率或宽高比。

我已经有了我的游戏设置,以便在所有其他绘制调用周围的最高级别调用 spritebatch.begin() 和 end() ,这样我在技术上就可以在那里传递缩放矩阵,但每当我这样做时会做一些奇怪的事情,比如使视图偏离中心,或者只占据屏幕的四分之一。

是否有实现这一目标的最佳实践方法?


如果你设置一个缩放矩阵SpriteBatch.Begin,然后它将缩放尺寸和职位你绘制的每一个精灵SpriteBatch,直到您致电End.

SpriteBatch使用客户空间,其中零是左上角Viewport,该空间中的一个单位相当于视口中的一个像素。

当你给予SpriteBatch一个变换,您绘制的精灵将在绘制之前为您应用该变换。所以你可以(并且应该)使用同样的技术翻译您的场景(例如,将其以玩家为中心)。

例如:

您的游戏以 720p 开发,并且您正在使用SpriteBatch无需转换。你有一个位于右下角中心的精灵。假设它的纹理是 (32, 32) 像素,精灵的origin是 (16, 16)(原点在纹理空间中指定,因此这是精灵的中心)。精灵的position是 (1280, 720)。精灵的scale为 1,这使得其结果大小为 (32, 32)。您将在屏幕右下角看到精灵的左上四分之一。

现在您转到 1080p 的屏幕(比 720p 大 1.5 倍)。如果你don't添加缩放矩阵SpriteBatch,您可以看到整个精灵,其位于屏幕的三分之二处,向右和向下。

但您想要放大整个场景,以便在 1080p 下看起来就像在 720p 下一样。所以你添加矩阵Matrix.CreateScale(1.5f, 1.5f, 1f)(注意 Z 轴使用 1,因为这是 2D 而不是 3D)SpriteBatch.Begin,并做没有其他的.

现在,您的精灵场景将放大 1.5 倍。不做任何实际改动Draw调用时,你的精灵将被绘制在位置 (1920, 1080)(屏幕右下角),其大小将为 (48, 48)(大 1.5 倍),其原点仍将是中心。您将在屏幕右下角看到精灵的左上象限,就像您在 720p 下所做的那样,并且具有相同的相对尺寸。

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

PC 上 XNA 中的信箱和缩放 的相关文章

  • 如何在 gitlab-ci 共享运行器上使用自定义 Windows docker 容器

    我有一个包含以下两个文件的存储库 它构建一个安装了 Visual Studio buildtools 的 Windows docker 容器 并将其推送到 gitlab 为我的存储库提供的注册表 Dockerfile escape FROM
  • 如何将组添加到多个内置功能区选项卡 (vsto)?

    这是 VS2010 Office 2010 加载项 我想要的只是添加一个按钮 或按钮组 到多个内置选项卡 例如 我的按钮应该在两个中都可用新邮件消息功能区 and in 新预约丝带 我尝试添加一个新选项卡 在视觉设计器中 但这似乎不起作用
  • 无法将 Tomcat 作为 Windows 服务启动

    我在Windows 8上使用Tomcat6 我可以通过startup bat启动Tomcat 不会出现错误 我已将 Tomcat6 exe Tomcat6w exe 和 service bat 复制到 tomcat bin 目录下 并将 e
  • Google Directions api Web 服务 - 在地图上显示响应。是否可以?

    有没有办法使用来自调用的 Google 方向 Web 服务的响应 例如来自如下 C 代码 var url System String Format http maps googleapis com maps api directions x
  • ~ C 中的运算符

    该程序的输出是 13 我从来没有完全理解 C 中的 运算符 为什么它给出 13 作为输出 如何将 运算符限制为数字的 4 位 include
  • 如何终止从cin读取?

    我已经尝试了这里列出的一堆方法 但没有一个起作用 它总是在等待更多的输入 我试过了while std getline std cin line 和下面的方法 似乎没有任何作用 include
  • Qt:将事件发布到 QThread 的正确方法?

    在我的 Qt 应用程序中 我有一个主线程和一个工作线程 工作线程子类QThread并通过处理事件customEvent 这是主线程发送要由工作线程处理的事件的正确方法吗 QThread myWorkerThread QApplication
  • 实体框架 - 将枚举的 ICollection 保存在数据库中

    我有一个具有 type 属性的类ICollection
  • 将 ManualResetEvent 包装为可等待任务

    我想等待手动重置事件 并超时并观察取消 我想出了类似下面的东西 手动重置事件对象由我无法控制的 API 提供 有没有办法在不占用和阻塞 ThreadPool 线程的情况下实现这一点 static Task
  • 以编程方式解析和编辑 C++ 源文件

    我想以编程方式解析和编辑 C 源文件 我需要更改 添加代码的某些部分 即函数 类块等 中的代码 我也 最好 能够得到评论 我想做的部分事情可以用下面的代码来解释 CPlusPlusSourceParser cp new CPlusPlusS
  • 如何使用鼠标指针和键盘快捷键捕获文本?

    我想使用 C 或 java 使用鼠标指针和键盘快捷键从打开的窗口捕获文本 喜欢babylon http babylon com 所以 我需要知道什么以及如何实施 我需要使用哪些库 或者我可以使用 winapi 吗 使用脚本语言创建您想要执行
  • 从 ASP.NET 插入到 MS Access

    我们正在尝试建立一个专门用于内联网的服务台票务系统 决定使用 Visual Studio 2008 Express 的 ASP NET C 如果需要的话 我们有一个完整版本 没什么花哨的 几页抓取 NTLM 信息 系统信息并将其与问题一起存
  • 执行 Mongo 查询 db.collection.runCommand("text",{"search":"search text"})

    我需要在我的网站中添加全文搜索选项 在 mongodb 中添加数据库 蒙戈查询 db collection runCommand text search search text 给出了结果 但是如何使用C 执行它 collection In
  • 从 C# 运行多个 python 脚本

    我希望有人能够在这里帮助我 我对 C 比较陌生 正在尝试执行我在 C winform 应用程序中编写的一些 Python 代码 我想做的是从 winform 中的文本框中输入名称 并让它通过 python 脚本进行处理 并在 winform
  • 当我更新具有相同数据类型的另一个列表时列表发生更改

    我的代码看起来像这样 public class Category public string CatId get set public string CatName get set public string SpecId get set
  • 如何搜索来自另一个页面模型的串联名称列表?

    我的项目中有多个模型 但在下面的屏幕中 大多数字段 属性都位于 SecurityLog 模型中 下面是我显示的官员串联列表 除了军官姓名之外 我的搜索和列标题排序功能正常 我很难合并官员姓名 因为该列表来自另一个页面模型 这是我的数据库架构
  • 在 C# 中获取 Selenium RemoteWebDriver 的会话 ID

    我正在尝试获取在 SauceLabs 云上运行的测试的会话 ID 但我似乎无法访问它 我尝试过以下方法 Returns null var sessionId string RemoteWebDriver driver Capabilitie
  • Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential 不采用 2 个参数?

    我在代码中使用 ADAL 我想要使 用的一件事是使用不同的凭据 因此我可以在控制台程序中针对 Azure AD 授权不同的用户 Microsoft IdentityModel Clients ActiveDirectory UserCred
  • 多处理冻结计算机

    我通过使用多处理提高了执行时间 但我不确定 PC 的行为是否正确 它会冻结系统 直到所有进程完成 我使用的是 Windows 7 和 Python 2 7 也许我做错了 这就是我所做的 def do big calculation sub
  • 选择数据结构

    根据需求使用不同的数据结构 但我如何知道应该使用哪种数据结构 我只是想知道如何选择合适的数据结构 谢谢 此流程图适用于 C 中的 STL 但您可以用 C 实现 STL 容器支持的任何数据结构 列表是一个链接列表 Vector是一个动态数组

随机推荐

  • 如何获取 NSTextStorage/NSString 中的单词数?

    所以我的问题基本上是如何获取 NSTextStorage NSString 中的单词数 我不需要字符长度 而是单词长度 谢谢 如果您使用的是 10 6 或更高版本 以下可能是最简单的解决方案 NSUInteger numberOfWords
  • pandas groupby 中两个系列的最大值和最小值

    是否可以从 groupby 中的两个系列中获取最小值和最大值 例如下面的情况 分组时c 我怎样才能得到最小值和最大值a and b同时 df pd DataFrame a 10 20 3 40 55 b 5 14 8 50 60 c x x
  • Laravel 5 中的两个登录表单

    我一直想知道如何在 laravel 5 中制作两个登录表单一段时间 原因是因为我有一个多站点项目 我在一个项目中拥有管理站点和公共站点 我对路由进行了分组 以便管理路由回答一个域 公共路由回答另一个域 如下所示 Route group ar
  • 如何防止 Bootstrap Navbar Toggle 下推内容?

    我将 Bootstrap 与静态顶部导航栏一起使用 如下所示
  • 由于表扫描,表值参数的性能较低

    我有一个将参数传递给 SQL 过程的应用程序 其中一个参数是表值参数 其中包含要包含在 where 子句中的项目 因为当我将 TVP 连接到具有 200 万行的表时 表值参数没有附加任何统计信息 所以查询速度非常慢 我还有什么选择 同样 目
  • 处理注入的 HttpClient

    我们的 MVC 应用程序使用 HttpClient 调用 WebAPI 操作 我决定使用 StructureMap 注入 HttpClient 并覆盖控制器中的 dispose public HomeController HttpClien
  • Azure 函数中的 Autofac 依赖注入

    我正在尝试使用 Azure 函数中的 Autofac IOC 来实现 DI 我需要构建容器 但不确定将构建容器的代码放在哪里 我确实写了一篇博客文章 用于在 Azure Functions 中使用 Autofac 进行依赖项注入 看看这里
  • Python pandas:向我的数据框中添加一列来计算变量

    我有一个像这样的数据框 gt org group org1 1 org2 1 org3 2 org4 3 org5 3 org6 3 我想将列 count 添加到 gt 数据帧以计算组的成员数量 预期结果如下 org group count
  • (Linux) 如何在没有显示环境的情况下运行gtk程序? Gtk-警告 **:无法打开显示:

    我有一个必须在 GTK gui 环境中运行的程序 我只能使用ssh 该程序将在服务器 centos 6 上运行并安装 gnome X 显示 不需要看GUI 但运行完成后 我就能得到答案 VNC 和远程屏幕已禁用 当我在 ssh 中启动程序时
  • 字符串比较在 PowerShell 函数中不起作用 - 我做错了什么?

    我正在尝试创建一个别名git commit它还将消息记录到单独的文本文件中 然而 如果git commit回报 nothing to commit working directory clean 它不应该将任何内容记录到单独的文件中 这是我
  • ACRA formkey 哪里可以得到?

    所以我尝试按照以下说明进行操作https github com ACRA acra wiki BasicSetup https github com ACRA acra wiki BasicSetup但它太旧了或者什么的 使用我自己的 gm
  • 在 Photoshop 脚本中保存每个用户或每个文档的首选项

    我正在使用 ExtendScript 在 JavaScript 中编写 Photoshop 脚本 我的脚本允许一些用户输入 我想在使用之间保存它 也就是说 我正在寻找一种方法来在特定键下保存简单的字符串或数值 以便我能够在后续使用脚本时访问
  • mysql 中的 SELECT UNION 和 ORDER BY.. 如何?

    我想从单个表中获取所有行 但以不同的方式对它们进行排序 例如我写 SELECT FROM table1 ORDER BY fieldA ASC LIMIT 3 UNION SELECT FROM table1 ORDER BY FieldB
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • 检查redis是否正在运行->node js

    我只是想知道 在 NodeJS 进程开始时 Redis 是否启动 因此用户会话是否会被存储 这是我目前所拥有的 var session require express session var RedisStore require conne
  • 如何查看用户签入 Visual SourceSafe 的所有文件?

    Microsoft Visual SourceSafe 中有没有办法查看我签入过的所有文件 选择项目后 转到 工具 显示历史记录 勾选 递归 然后在 用户 中输入您的用户名 单击 确定
  • 如何在 Jenkins 工作流脚本中使用日志解析器插件

    日志解析器插件现在是与工作流程兼容 https issues jenkins ci org browse JENKINS 27208但我该如何使用它呢 最简单的就是使用片段生成器获取使用它的示例步骤语句
  • NodeJS 生成用于签名和验证消息的有效 PEM 密钥

    Context 来自关于 Node v10 9 0 的 TLS SSL 的 NodeJS 文档 2018 年 8 月 https nodejs org api tls html tls tls ssl concepts https node
  • 矩阵行列式算法 C++

    我是编程新手 我一直在寻找一种找到矩阵行列式的方法 我在网上找到了这段代码 但我很难理解这里的算法 我对递归的基础没有问题 但继续和主循环我很难理解 非常感谢任何可以向我解释该算法的人 int determ int a MAX MAX in
  • PC 上 XNA 中的信箱和缩放

    有没有一种方法可以让我基本上以 1080p 或 720p 作为默认分辨率来开发 XNA 游戏 然后根据设置的分辨率将游戏中的所有内容缩放到适当的大小 而不必在每个 Sprite 中设置缩放因子Draw 方法 我的想法是 我可以基于 1080