- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
嘿,我已经四处寻找了一段时间,但我仍然找不到这个问题的直接答案。我有一个 XNA 游戏,其中 UI 的一部分显示了一个图标,该图标会经常更改(频率无关紧要)。我决定使用一个简单的 spritesheet maker,它输出 spritesheet 以及一个简单的 XML 文件,其中包含每个单独图标的位置。
我希望能够将 XML 文件中相应图标的 spritesheet 位置和图标大小读取到 Rectangle
中。然后我可以将其用作绘图位的源矩形。
然而,我还没有找到一个简单的解释,说明如何在不编写我自己的内容管道的情况下将 XML 文件加载到 XNA 4.0 项目中(如果可能的话,我想避免这种情况)以及一旦加载如何有效地(通常) 将数据提取到 Rectangle
变量中。
XML 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with TexturePacker http://texturepacker.com-->
<!-- $TexturePacker:SmartUpdate:748fc56befb00c22540f953093f731a7$ -->
<!--Format:
n => name of the sprite
x => sprite x pos in texture
y => sprite y pos in texture
w => sprite width (may be trimmed)
h => sprite height (may be trimmed)
oX => sprite's x-corner offset (only available if trimmed)
oY => sprite's y-corner offset (only available if trimmed)
oW => sprite's original width (only available if trimmed)
oH => sprite's original height (only available if trimmed)
r => 'y' only set if sprite is rotated
-->
<TextureAtlas imagePath="Loadout_Icons.png" width="185" height="86">
<sprite n="Charge_Down.png" x="0" y="0" w="37" h="43"/>
<sprite n="Charge_Up.png" x="37" y="0" w="37" h="43"/>
<sprite n="Damage_Down.png" x="74" y="0" w="37" h="43"/>
<sprite n="Damage_Up.png" x="111" y="0" w="37" h="43"/>
<sprite n="FireRate_Down.png" x="148" y="0" w="37" h="43"/>
<sprite n="FireRate_Up.png" x="0" y="43" w="37" h="43"/>
<sprite n="Health_Down.png" x="37" y="43" w="37" h="43"/>
<sprite n="Health_Up.png" x="74" y="43" w="37" h="43"/>
<sprite n="Speed_Down.png" x="111" y="43" w="37" h="43"/>
<sprite n="Speed_Up.png" x="148" y="43" w="37" h="43"/>
</TextureAtlas>
我也不确定如果我不制作自己的 XML 文件而搬起石头砸自己的脚,那会更容易吗?
我已经阅读了 msdn 必须提供的大部分内容,但无济于事,但非常感谢任何指向相关页面或问题的链接。提前致谢。
最佳答案
以下应该可以工作,但是,它完全未经测试:
[XmlRoot("TextureAtlas", IsNullable = false)]
public class TextureAtlasXml
{
public static TextureAtlasXml FromFile(String file)
{
using (var stream = File.OpenRead(file))
{
return FromStream(stream);
}
}
public static TextureAtlasXml FromStream(Stream stream)
{
var serializer = new XmlSerializer(typeof(TextureAtlasXml));
return (TextureAtlasXml)serializer.Deserialize(stream);
}
[XmlAttribute("imagePath")]
public String ImagePath;
[XmlAttribute("width")]
public Int32 Width;
[XmlAttribute("height")]
public Int32 Height;
[XmlElement("sprite")]
public List<SpriteXml> Sprites;
}
public class SpriteXml
{
[XmlAttribute("n")]
public String Name;
[XmlAttribute("x")]
public Int32 X;
[XmlAttribute("y")]
public Int32 Y;
[XmlAttribute("w")]
public Int32 Width;
[XmlAttribute("h")]
public Int32 Height;
public Rectangle Rectangle { get { return new Rectangle(this.X, this.Y, this.Width, this.Height); } }
}
我建议您考虑使用内容管道,因为它提供了一个很好的解决方案,但是,代码应该可以按您想要的方式工作。
关于c# - 在 XNA 中读取 spritesheet XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13341017/
我可以将内容项目引用到非 XNA 项目(MonoGame,如果它很重要)? 最佳答案 不直接。 将内容项目引用添加到项目的功能仅适用于“XNA 游戏”和“XNA 游戏库”类型的项目。 当我想在 Win
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
您如何看待 xna 和大型多人游戏?例如服务器和 100 个客户端?有没有很好的教程如何在 xna 中创建客户端服务器应用程序? 最佳答案 当然有关于如何做到这一点的教程。我个人使用 Lidgren
好的,所以我正在开发这个游戏,我是 XNA 的新手(我使用的是 4.0),我想做的是每次产生敌人时都有不同的纹理。 所以我有这些图像“image1.png”、“image2.png”等等。我希望它在每
我最近开始检查XNA。一切进展顺利,我什至开始了一个工作样本。困扰我的一件事是,每当我将鼠标放在游戏窗口上时,它就会消失。我不知道这是否是默认行为,但我想更改此设置以便可以看到鼠标。任何和所有建议,不
我刚从 XNA 开始,有一个关于轮换的问题。当你在 XNA 中将一个向量乘以一个旋转矩阵时,它会逆时针旋转。这个我明白。 但是,让我举一个我不明白的例子。假设我将一个随机艺术 Assets 加载到管道
我正在使用 Visual Studio 2010 Ultimate,在谷歌上搜索 XNA 下载后,我找到了这个页面: http://blogs.msdn.com/b/xna/archive/2010/
我有一个字典来存储SoundEffects,例如: public static Dictionary Hangok = new Dictionary(); 我从文件(正常.wav格式)加载声音,例如:
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 10年前关闭。 Improve this
好吧,我正在尝试为 3D XNA 游戏创建自己的物理引擎,但我在计算我应该将物体移动多少时遇到重力问题。 XNA 的游戏计时器每 16 毫秒出现一次,所以经过一些计算,并使用 9.81m/s 作为我的
我正在尝试对以下粒子系统进行修改。 http://create.msdn.com/en-US/education/catalog/sample/particle_3d 我有一个功能,当我按下Space
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
也许这更像是一个数学问题而不是一个编程问题,但我一直在尝试在 XNA 中实现旋转卡尺算法。 我已经使用维基百科上详述的单调链从我的点集中推导出了一个凸包。 现在,我正在尝试对我的算法进行建模,以在此处
我正在 XNA 中制作一个简单的 2 人游戏,并开始研究保存玩家的高分。 我希望游戏能在 XBox 360 和 Windows 上运行,所以我必须使用框架来保存数据。 您似乎将数据保存到特定用户的玩家
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我需要使用不同字体大小的 spritefont,我必须为每个大小创建新的 spritefont 吗? 最佳答案 基本上是的。 有一个overload的 SpriteBatch.DrawString这为
我对在我的游戏中存储 *.txt 级别文件的位置和方式感到非常困惑。 我想要在我的游戏中提供一些随游戏一起安装的“预烘焙”关卡的可用性,以及用户创建自己的关卡的能力。 所以我所做的是在 Visual
我有一个足够简单的着色器,它支持多个点光源。 灯光存储为一组灯光结构(最大大小),当事件灯光发生变化时,我会传入事件灯光的数量。 问题出在 PixelShader 函数中: 这是基本的东西,从纹理中获
我有 19 张图像,它们是我的播放器的动画帧 在下面,我创建了 Frog 纹理数组,这是我的播放器。并且有 19 个图像。如何对它们进行动画处理。 公共(public)类纹理 { 公共(public)
所以,我要直截了本地说,我正在尝试在我正在制作的 XNA 游戏中制作一个聊天系统。我可以很容易地找出正在按下的键但是我无法知道实际键入的是什么。在我看来,他们好像在说:OemShifthello bi
我是一名优秀的程序员,十分优秀!