可能不是一个描述性很强的标题,但我正在尽力而为。这是我第一次在 StackOverflow 上发帖,而且我对 C# 编程还比较陌生(大约一年前开始使用 Unity,几天前决定升级到 XNA)。话虽如此,请对我好一点。
我正在计划我正在设计的 2D 游戏的机制,虽然在 XNA 中玩过之后大部分看起来都很简单,但我一直在回想一个问题,我还没有想出一个令人满意的答案为了。该问题涉及将精灵分层为复合/复杂精灵。例如,游戏中的角色可能使用任意数量的武器中的一种或两种。我确实对该主题进行了一些研究,发现有些人建议使用 RenderTarget 类将一系列精灵绘制为一个,而有些人建议在 Draw() 期间简单地将精灵绘制在彼此之上。然而,这些主题主要集中在游戏中具有单个角色的相对简单的案例上。
就我而言,游戏将有许多基于精灵的角色,他们具有完全不同的姿势/动画。现在大约有 10 个,以后可能会在开发中添加更多。同样会有大量的武器(可能开始时大约 20 个)将被合成到角色身上。这让我很舒服。然而,问题在于每个角色都需要在角色动画的每一帧期间将武器精灵绘制在不同的位置并使用不同的旋转。
我已经考虑了几种方法来解决这个问题,但它们都有相当大的缺点。
第一个是简单地为每个角色绘制每个武器的 spritesheet,与相应角色的大小相同。这种方法的好处是只需添加调用即可在基本角色之上绘制额外的精灵,而无需进行任何计算。不利的一面是会产生过多的额外精灵表(10 个字符 x 20 个武器需要 200 个额外的表)。
第二个是创建一个类来处理武器精灵。WeaponSprite 类将附加到每个武器的单个纹理上,然后根据附加到的角色存储有关绘制时要使用的偏移/旋转的信息。这样做的问题是,在每帧的基础上组织偏移/旋转将非常乏味,而且我想不出任何简单的方法来根据所需的帧提取信息。(我的想法是制作一个 AnimationFrame 类来跟踪每个角色的动画名称、朝向和帧数,然后使用武器类中的字典根据当前帧的名称加载适当的数据,但这个想法的某些方面似乎真的很糟糕)。这种方法还有一个缺点是需要相对大量的内存来完成(假设 Vector2 是 8 字节,浮点数是 4,考虑到当前使用的帧数,有 10 个字符和 20 个武器将需要 192KB 的内存,随着更多武器的加入,它只会变得更大)。我有这个想法的一个分支(我从关于同一主题的另一篇文章中偷来的)使用保留的 alpha 值像素来链接每个武器的偏移量和“原点”,在运行时计算位置,然后只需将旋转浮点数存储在上述字典中。随着更多武器的加入,它只会变得更大)。我有这个想法的一个分支(我从关于同一主题的另一篇文章中偷来的)使用保留的 alpha 值像素来链接每个武器的偏移量和“原点”,在运行时计算位置,然后只需将旋转浮点数存储在上述字典中。随着更多武器的加入,它只会变得更大)。我有这个想法的一个分支(我从关于同一主题的另一篇文章中偷来的)使用保留的 alpha 值像素来链接每个武器的偏移量和“原点”,在运行时计算位置,然后只需将旋转浮点数存储在上述字典中。
由于我是 XNA 的新手(并且在 C# 上仍然很年轻),我想我会发布并让专家参与进来。我的方法是否走在正确的轨道上,还是我错过了一些非常简单的东西?非常感谢您的帮助,如果您需要任何其他信息,请告诉我。