【问题标题】:Storing vector XNA Animations存储矢量 XNA 动画
【发布时间】:2010-02-06 07:27:01
【问题描述】:

当我遇到这个问题时,我正在研究 XNA C#,我需要存储易于编辑的动画数据,以便我的游戏能够渲染和播放它。

是这样的:

我有一个纹理从 (0,0) 到 (800,600) 像素飞过屏幕。这将持续 5 秒。

我如何在数据中表示它并编写它以便游戏能够解释并执行DrawUpdate 方法中的必要操作。如果我需要做一些广泛的编码也没关系。

【问题讨论】:

  • 如果您将动画存储为 XML,那么您可以通过内容管道加载它们
  • 你真的不能在 XML 中定义很多不同的动画和过渡吗?
  • @Martin:如果项目要在普通 PC 以外的平台上运行,任何脚本动画都必须通过内容管道,无论它们是否以 XML 完成。将 XML 用于动画 DSL 的结构与纯文本相比没有任何好处。
  • 您可以将 XML 用于 DSL,但充其量只会让人觉得笨拙。在任何一种情况下,定义动画所采取的各种活动都必须在代码中完成;唯一值得编写脚本的是使用哪些活动以及在什么时间使用。
  • 我提到 XML 的原因是因为内容管道会自动为您实现和去实现它。您在 C# 中定义类,管道处理编写一个 serealiser - 节省您编写和调试整个 DSL 解析器!

标签: c# animation xna


【解决方案1】:

一种简单的领域特定语言会有所帮助;创建一个 AnimationDirector 类,该类将解释动画脚本中的语句并在DrawUpdate 期间执行适当的工作。 DSL 本身可以很简单

texture 0,0; 800,600; 5.0

这将在 (0,0) 处创建一个纹理为 texture 的对象,并在 5 秒内将其移动到 (800,600),然后将其销毁。

如果你想要一些更有用的东西,

create x texture 0,0
over 5.0 move x 800,600
destroy x

这将使您获得更多创意,并扩展动画的可能性(例如添加旋转等,如果您愿意的话)。

现在,当您需要运行动画时,只需将适当的资源名称传递给导演,让它从那里处理事情。或者,您可以创建某种引用特定脚本的 AnimatedEntity,并为 DrawUpdate 调用 AnimationDirector 本身;取决于你到目前为止如何完成你的引擎,这可能更适合它的设计。

【讨论】:

    【解决方案2】:

    这里有一个快速提示...

    纹理的位置可以通过一个数学公式来定义,它会在开始时给你 (0,0),五秒后给你 (800,600)...

    【讨论】:

    • 我知道如何在数学公式中定义它。但是,存储的数据应该易于编辑(即人类无需多想即可轻松阅读),并且有多个动画一起运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2013-04-07
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多