03. 动作的优先级

概要

这里介绍动作优先级的设置和使用。
可以单独使用库中自带的 MotionQueueManager 来播放动作。
这种情况下,一个动作进行时,另一动作是否应同时发生的判断需要单独配置。
样例中使用的是 L2DMotionManager 类。
由于继承了 MotionQueueManager 类,所以使用方法基本相同。
这个类在 MotionQueueManager 类的基础上添加了动作优先级的概念。

优先级设置标准

 * 动作未进行的状态,优先级为 0。
 * 待机动作发生时,优先级为 1。
 * 其他动作进行时,优先级为 2。
 * 无视优先级,强制发生的动作,优先级为 3。

使用方法

优先级根据以下规则使用:
 * 当前无动作 ( 优先级 0 ) 时,进行待机动作 ( 优先级 1 )。
 * 触碰等操作引发动作 ( 优先级 2 ),且当前优先级低于 2 时,进行动作。
 * 除了对当前动作,对预约的动作也可设置优先级。
     即使在其他线程中读取,也可对要求发生的动作进行判断。

开始待机动作的示例
//判断待机动作
if( mainMotionManager->isFinished() ){
//当前无动作,则随机播放待机动作
mainMotionManager->startMotion( motions[ randomNo ] , L2DMotionManager.PRIORITY_IDLE );
}

触碰时引发动作的示例
if( mainMotionManager->getCurrentPriority() >= priority ){
//当前有动作发生时,不触发
return;
}

mainMotionManager->startMotion(motion,priority);//开始播放动作

预约动作的示例
从其他线程读取文件有时间差时,需要设置预约的优先级。
if( mainMotionManager->getReservePriority() >= priority)
{
//动作已预约,所以不触发(已在其他线程中准备)
return;
}
if( mainMotionManager->getCurrentPriority() >= priority ){
//当前有动作发生,不触发
return;
}
mainMotionManager->setReservePriority(priority);//动作不需要同时发生时,先设好优先级,进行预约
//读取文件
load();


...

//读取完成后触发动作,此时无视其他动作的请求。
mainMotionManager->startMotion(motion,priority);


コメント