这是我第一次需要创建一个过场动画系统。我在网上已经阅读了很多关于完成这项任务的不同方法,并将它们与我自己的想法混合在一起。现在,这是实施时间,但我需要来自其他人的一些信息,这些人在这个领域比我更有经验。我们走了:
1)几年前,我实现了一个系统,该系统可以以串行/并行方式排队操作,构建一个操作树,在执行时创建最终结果。这可以肯定地用作过场动画系统导演,但是,在某个时间运行动作的时间表难道不是那么简单吗?一个例子:
这样一切都非常简单。支持串行操作,请及时正确地传播它们,并行操作只需要共享时间范围。
我看到的一个问题是,Sync()之类的动作(这只是等待所有动作在开始之后的其他动作之前完成)无法使用,因为我们正在使用绝对时间来触发我们的动作。无论如何,一个解决方案可能是让我们的行为基于最后的“sync()”进行分层。我的意思是这样的:
正如您可能注意到的那样,sync()从0开始再次启动,因此,当运行sync()并确定上次sync()之前的所有操作都已完成时,timeLine已用时间将再次为0。这可以看作是小型过场动作组。
2)之前的解释需要在过场动画开始时添加所有动作。这是通常的做法吗?或者您是否经常在需要时向时间线添加操作?
嗯,我可能在这里错了,但我认为这可能是一个很好的&为过场动画制定行动的简单方法。你怎么看?。
提前致谢。
答案 0 :(得分:2)
我已经完成了一些这样的系统。我会告诉你我喜欢用什么,希望这能回答你的问题。
我使用LISP方言的第一个过场动画系统之一,因为只需几个小时的工作就可以让解析器工作。过去曾经像......
(play "song1.mp3")
(set "ogre1" (create "ogre"))
(moveTo "ogre1" '(100, 100, 100))
(wait 1)
我创建了一些像处理我的脚本的虚拟机(VM)。 VM没有使用单独的线程,而是具有执行X量指令的更新功能,或直到它达到某个同步指令,如等待1秒。
那时这个系统必须在没有XML解析器的J2ME设备上工作,并且XML解析器需要添加太多代码。这些天我使用XML除声音和纹理之外的所有东西。
这些天我正在使用BRPocock建议的关键帧系统。问题是如果没有适当的工具,这将更难管理。如果您已经为您的模型使用了一些3D软件,我建议您调查使用该产品的选项。我使用Blender作为个人项目的过场动画,因为我在工作场所免费使用Maya和3ds Max,但想法是一样的。我导出到COLLADA然后我有关键帧的动画轨迹。问题在于COLLADA格式并不是最简单的灵活方式,需要大量的工作才能从中提取所需内容。
您的格式问题是描述插值,以便将食人魔从一个位置移动到另一个位置......这需要多长时间?关键帧系统的优点是你可以及时指定食人魔的位置......但是没有工具的这种系统的脚本将很难。这里还有一个简单的格式建议:
(play 'song1.mp3')
(entity 'ogre'
(position (
0 (100 100 100)
2 (100 200 100)
5 (100 300 100)
7 (100 300 400)
8 (100 300 500))
(mood (
0 'happy'
7 'angry'))
(... more tracks for that entity if you need ...))
(entity 'human'
(position (.....)))
现在有了这样的格式,你可以看到食人魔的时间。因此,如果你在过场动画中有1.5秒的时间,你可以在关键帧之间进行插值,时间为0秒和2秒。当正确的书籍出现时,情绪可能是你不会插入的东西。我认为这种格式会更加灵活,并且会解决您的同步问题,但我不建议您在没有大脚本工具的情况下手工编写。如果你的过场动画只用几个实体只需几秒钟,那么它可能对你有好处。