控制概念的定义
在一个场景图的应用场景里,用户的很多操作,本质上,是手动或自动的控制场景图中的对象。例如,在3D浏览过程中对视图进行旋转,放缩和平移,本质上是对与视图所绑定的摄像头做控制。在场景图中播放一段动画,本质上是运行一个自动程序,并由其对相关的3D对象进行控制。因此,“控制”是tuo-scene项目最核心的管理要素之一。本文将定义几条规则应用于所有需要“控制”的场景。
控制管理的问题
控制管理的核心问题是资源的占用的问题。一个3D对象同时被手动控制效果和多个自动控制效果所完全控制则很可能产生不可预测的结果,绝大多数情况下,这是不允许的。同样一个手动操作产生多种控制效果,在绝大多数的情况下也是不运行的(例如滑动屏幕时,同时控制摄像头移动和场景中其他对象的平移)。这就涉及到了控制资源的管理问题。
控制规则
- 所有手动控制效果开始启动时,需要向TuoView和被控制对象发布控制启动消息。
- 所有自动控制效果在开始启动时,需要向被控制的对象发布控制启动消息。
- 所有运行中的自动控制效果需要监听被控制对象的控制启动消息,一旦监听到随即作出反应(例如,停止自己的控制)。
- 所有待启动的手动控制效果需要监听TuoView对象发布的控制启动消息,一但监听到,则停止监听,直到其再次收到TuoView发布的控制结束消息,才恢复到待启动状态。
- 所有手动控制效果在结束时,需要向TuoView和被控制对象发布控制结束消息。
- 所有自动控制效果在结束时,需要向被控制对象发布控制结束消息。
控制启动消息
{
type: 'startControl',
id: String (uuidv4), //一个uuidv4字符串
}
控制结束消息
{
type: 'endControl',
id: String(uuidv4), //一个uuidv4字符串
reason: 'interrupt' || 'end' //表示结束原因,'interrupt'表示被其他控制效果所打断,'end'表示自然结束
}