按时间顺序排列的事件序列*事件

时间:2017-08-26 02:28:59

标签: algorithm animation synchronization streaming graph-algorithm

如果这有些模糊,我会事先道歉,但我甚至缺乏如何处理这个问题的基本想法 - 包括甚至知道是否有适当的搜索条件。

我正在尝试编写表格驱动的时间顺序事件动画系统,其中描述性评论也从表格中拉出,但该评论是在实际事件动画的提前发布的,所以不喜欢子标题,它们与屏幕上的事件同步。

进一步解释:

给出一个带

的表格
Seq | Event                                  | Start | End | Pace
 1  | Walk up to A                           |       |  A  | Walk
 2  | Stand at A                             |   A   |     | Stand
 3  | Walk from A to B                       |   A   |  B  | Walk
 4  | Run from B to C                        |   B   |  C  | Run
 5  | Stand at C, turn left                  |   C   |     | Stand
 6  | Turn left at C and walk to D           |   C   |  D  | Walk
 7  | At D quickly spin around your own axis |   D   |     | Stand
 8  | Run back to A                          |   D   |  A  | Run

等等。移动的速度和站立或绕轴旋转的持续时间由可变属性设置 - 毕竟有些人比其他人快。

重点是评论 - 必须是事件列中的文本,将在实际移动之前读取

创建这样的序列

Seq | Commentary                               | Movement
 0  | See the toon walk up to A and stop there | animation of movement to A from random point
 1  | They now stand and will move from A to B | toon stands in place
 2  | at B they will run to C                  | toon is walking towards B
 3  | at C they will turn left                 | toon is running towards C
 4  | then they walk from C to D               | toon is still running towards C
 5  | at D they spin around their axis         | toon is walking towards D
 6  | after spin they will run back to A       | toon does the spin at D, 
    |                                          | based on timing they are running back to D

我试图在这里包含一些边缘案例。例如,如果偶数太短以至于评论的持续时间会比动画的持续时间长,那么在移动之前立即背靠背地阅读两个评论。

考虑到视频和审计编辑等系统,采用多轨方式,我认为我可以做类似的事情。我会"预编译"将序列表转换为时间轴,然后通过将其移动到左边来创建评论轨道" (即时间倒退,原样)。播放将显示两个流。

但我完全缺乏这方面的知识,甚至不确定要研究什么,所以我可以学习。这是某种形式的状态机吗?事件循环?

系统最终将在C#/ .NET中开发。 Xamarin确切地说,允许它在Android和iOS上运行。动画代码实际上是存在的,在脚趾行走,跑步,站在网格上的点之间(这些点可以归结为坐标)。与阅读事件文本一样,音频评论现在也很简单(甚至还有与设备无关的PCL)。

我完全迷失了时间和同步!在表(和属性)中的信息之外创建偏移动画和音频之间的时间流。我研究了状态机和图论等问题,但坦率地说,其中很多都是我的想法。

我应该在这里研究什么?我对你的回答感到非常满意,你尝试做的事情叫做XXX,谷歌搜索算法""并且"阅读本文以了解更多关于做XXX和YYY"和#34;这描述了算法(即使用另一种语言或根本不用语言)来做ZZZ"。

1 个答案:

答案 0 :(得分:1)

假设你可以计算出动画的长度和前面评论的长度。

action | length in sec
a1     | 5
a2     | 2
a3     | 3

commentary | length in sec
c1         | 2
c2         | 10
c3         | 5

首先为行动制定计划:

a-schedule | start | end
a1         | 0     | 5
a2         | 5     | 7
a3         | 7     | 10

现在通过调整每个评论的结束时间到相应操作的开始时间来创建评论的时间表:

c-schedule | start | end
c1         | -2    | 0
c2         | -5    | 5
c3         | 2     | 7

现在从第二个到最后一个元素遍历向后中的最后一个表并执行以下操作:

for(int x=c.length-2;x>=0;x--) {
  if (c[x].end> c[x+1].start) {
    c[x].end-= c[x].end- c[x+1].start;
    c[x].start-= c[x].end- c[x+1].start;
  }
}

将产生以下表格:

c-schedule | start | end
c1         | -10   | -8
c2         | -8    | 2
c3         | 2     | 7

每个评论都将在相应的操作之前完成 - 如果大多数评论的持续时间长于行动 - 它们可能会在之前发生。但是如果有几个行动比他们的评论更长,那么评论可以在那里获得行动。

该表显示您必须在开始播放第一个动作前10秒开始播放第一个评论。如果您想要从零开始的计划,则可以移动这两个值。