XNA 抽签:在整个游戏中使用一个 spritebatch

2024-02-19

我正在开发一款 XNA 游戏。现在是我仔细考虑架构的时候了。直到今天,我一直以这种方式实现我自己的绘制方法:

public void Draw(SpriteBatch sb, GameTime gameTime)
{
    sb.Begin();
    // ... to draw ...
    sb.End();
}

我在挖掘 DrawableGameComponent 时发现 Draw 方法是这样的:

public void Draw(GameTime gameTime)
{
    // ...
}

首先,我知道SpriteBatch可以在Begin和End之间收集许多Texture2D,因此对它们进行排序或使用相同的Effects进行绘制很有用。

我的问题是关于通过 SpriteBatch 的性能和成本。在 DrawableGameComponent 中,如果游戏对象的 spritebatch 是公共的,则可以调用该游戏对象的 spritebatch。

有什么建议,xna-game 程序员应该做什么?

谢谢指教。


的严重缺点之一DrawableGameComponent是你被锁定在它提供的方法签名中。虽然本身并没有什么“错误”,但DrawableGameComponent,不要将其视为“一种真正的建筑“。 你是过得更好 https://gamedev.stackexchange.com/a/9209/288将其视为可能的示例建筑学 https://stackoverflow.com/a/5459955/165500.

如果您发现自己需要通过SpriteBatch(或其他任何东西)到“游戏组件”的绘制方法 -最好的办法is将其作为参数传递。其他的事情都很复杂。

显然这意味着你不能使用XNA提供的GameComponent系统,你必须做出自己的选择。但这几乎是微不足道的:在最基本的层面上,它只是一些具有适当虚拟方法的基本类型的列表。


当然,如果你必须使用GameComponent- 或者你的游戏非常简单(例如:原型),你并不真正关心架构 - 那么你基本上可以使用any你喜欢的方法SpriteBatch到你的绘制方法。它们都有缺点。

可能下一个架构上最稳健的方法是传递你的SpriteBatch实例到每个组件的构造函数中。这使您的组件与游戏类分离。

另一方面,如果您将架构抛之脑后,我建议您将MyGame.spriteBatch field public static。这是允许在任何地方访问它的最简单的方法。它很容易实现,并且在以后需要时/如果需要的话也很容易清理。


回答你关于表现的问题:与通过考试有关的任何事情SpriteBatcharound 对性能的影响几乎可以忽略不计(提供调用的顺序Draw/Begin/End保持不变)。别担心。

(如果你看到SpriteBatch whatever在代码中,它代表一个引用。参考是一个 32 位值(在 32 位程序中,所有 XNA 游戏都是如此)。这与一个相同的大小int or a float。它非常小,而且传递/访问/等等都很便宜。)

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

XNA 抽签:在整个游戏中使用一个 spritebatch 的相关文章

  • WP7 XNA游戏:如何适应不同手机分辨率?

    我创建了一款针对 800 x 480 分辨率的游戏 但对其适应其他 WP7 分辨率很感兴趣 另外 我听说游戏可以通过 Mono 和 ExEn 移植到 iPhone 和 Android 从而开放大量其他屏幕分辨率 处理这个问题的正确方法是什么
  • 无法在 XNA4 中加载 spriteFont

    我正在闲逛 XNA 现在已经到了需要加载字体的部分了 很简单吧 Font1 Content Load
  • 从两个角度算出顺时针转还是逆时针转

    我正在 XNA 中制作游戏 我有敌人和玩家 敌人应该逐渐转向玩家 他们应该弄清楚是否需要顺时针转动或逆时针转动 以较短者为准 我通过使用 Atan2 得到了敌人当前面对的角度和它应该面对的角度 敌人和玩家之间的线的角度 作为弧度 不过我有一
  • 启动前检查 .NET 依赖项

    我有几个正在开发的应用程序 并且喜欢将其分发给需要 Microsoft 提供的 dll 和 或框架的朋友 具体来说 XNA 我厌倦了从他们那里收到说 它崩溃了 的电子邮件 而实际上 发生的只是他们没有安装 XNA 或 NET 3 5 或其他
  • 每次抽奖都重画不变的背景?

    这可能是一个非常简单的问题 但我搜索后发现没有其他方法可以做到这一点 每次绘制时都重新绘制背景是没有意义的 有没有办法画一些东西并将它们留在屏幕上 我试图注释掉 GraphicsDevice Clear Color CornflowerBl
  • 现在 Xna 不受支持,什么是更好的选择? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • libgdx SpriteBatch UnsatisfiedLinkError 桌面

    当尝试运行 LibGdx 项目的桌面独立版本时 我收到 UnsatisfiedLinkError 请注意 如果我只是直接运行桌面版本而不为其构建独立的 jar 则不会发生此问题 只有当我先构建桌面 jar 然后尝试运行它时 才会发生此问题
  • XNA 抽签:在整个游戏中使用一个 spritebatch

    我正在开发一款 XNA 游戏 现在是我仔细考虑架构的时候了 直到今天 我一直以这种方式实现我自己的绘制方法 public void Draw SpriteBatch sb GameTime gameTime sb Begin to draw
  • XNA 框架导入器

    我正在使用 XNA 框架开发游戏 我的游戏有几个级别 我将数据存储在纯旧文本文件中 在 VS 2008 中 当我将关卡文件添加到项目并编译时 我收到以下错误消息 错误 1 无法自动检测用于 Levels 0 txt 的导入程序 没有处理此文
  • 在 XNA 中缩放整个屏幕

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

    作为一个学校项目 我们创建了一个 C XNA 4 0 游戏 该游戏在从 Visual Studio 2010 本身运行 无论是发布版还是调试版 时都能完美运行 然而 当它构建完成后 游戏在某个时刻莫名其妙地崩溃了 负责的代码部分似乎是这样的
  • D3DERR_INVALIDCALL 错误,TeamCity 生成器

    我一直在尝试使用 TeamCity 4 5 来自动构建 XNA 项目 但我遇到了一个小问题 我的项目在 Visual Studio 2008 下可以正确编译 但在使用 TeamCity 作为生成器进行编译时则无法正确编译 配置文件使用 sl
  • 如何创建一个做某事的计时器?

    我对 XNA C 很陌生 我想知道如何在 XNA C 中创建一个在几秒钟后执行某些操作的计时器 我见过Flash 教程 http www republicofcode com tutorials flash as3timer 这满足了我的需
  • 找不到引用 Microsoft.DirectX.AudioVideoPlayback 和 Microsoft.DirectX

    我已经安装了 net 4 0 以及 XNA 4 0 前段时间我用过Microsoft DirectX播放一些音乐 现在当我尝试重做工作时 我找不到参考 平台上的新变化是否修改或移动了参考文献中的某些内容 视觉工作室 2010 右键单击项目
  • 无法访问生成配置管理器或 Visual C# 2010 Express 中的生成配置

    完整故事 通常 当我安装 Visual C 2010 Express 时 我做的第一件事就是切换到专家设置 这使我可以访问构建配置以及相应的管理器 最近的安装似乎行为不当 我创建的第一个项目是 XNA 4 0 刷新 项目 我导入了一些旧代码
  • MonoGame / XNA 在 Spritebatch 中绘制多边形

    我目前正在使用 MonoGame 编写游戏 我需要绘制纹理形状 我想绘制有 4 个角的多边形 我所有的渲染都是通过 spritebatch 完成的 我尝试使用 TriangleStripes 但它对我来说效果不太好 因为我没有任何着色器经验
  • MonoGame 和 Microsoft.XNA.Framework 命名空间之间的引用不明确

    MonoGame 一个基本上将 XNA 引入 Windows Phone 8 的框架 的所有命名空间都带有前缀Microsoft Xna Framework我相信将 XNA 应用程序移植到 MonoGame 时所需的代码更改量最小化 我的问
  • 如何在 C# 中使用随机数?

    我正在用 C 和 XNA 开发 Pong 我想使用一个随机数 在一定范围内 来确定诸如球是否直线反弹或以一定角度反弹以及球击中球拍时移动的速度之类的事情 我想知道如何实施 Use the Random http msdn microsoft
  • 是否有一种快速替代方法可以从 XNA 中的位图对象创建 Texture2D?

    我环顾四周 发现从位图创建Texture2D的唯一方法是 using MemoryStream s new MemoryStream bmp Save s System Drawing Imaging ImageFormat Png s S
  • XNA - 保持更长的时间跳得更高

    我正在为我的游戏寻找一种简单的方法 这样当你按住空格键时 你就会跳得更高 当您 点击 时 您不会跳到最大高度 需要有一个最大值 但是 是的 我不知道如何对此进行编程 任何帮助 非常感谢 将给予反馈 谢谢 在处理跳跃的更新函数中 您可以让它跟

随机推荐