Skip to content
Arkueid edited this page May 5, 2025 · 4 revisions

表情控制函数如下:

LAppModel.SetRandomExpression(fadeout=-1)
LAppModel.SetExpression(new_exp_id, fadeout=-1)
LAppModel.ResetExpression()  # 重置表情

fadeout 为 -1 时,切换表情为new_exp,并且将new_exp设置为默认表情。

fadeout >= 0 时,从last_exp切换为new_exp,并且在 fadeout 毫秒(ms)后恢复为 last_exp

多表情叠加

Model.SetExpression(expId: str):覆盖所有通过Add添加的表情

Model.SetRandomExpression() -> str:同上

Model.AddExpression(expId: str):叠加表情,戴帽子、星星眼、手势 这类不冲突的表情可以同时设置;有些表情会冲突(比如金瞳和赤瞳),只能显示其中一个表情

Model.RemoveExpression(expId: str) :清除通过Add添加的表情

Model.ResetExpressions():清除所有表情

Model.ResetExpression(): 清除通过Set设置的表情,此时如果 Add 激活的表情没有被 Remove,那么这些表情会重新显示

内部原理

Model.SetExpression(expId: str):使用单独的 ExpressionManager _expressionManager 更新表情

Model.AddExpression(expId: str)Model.RemoveExpression(expId: str) :通过 Map<ExpIdString, ExpressionManager> _expManagers 管理,每个表情对应一个单独的 ExpressionManager,AddExpression 时开启对应的 ExpressionManager

UpdateExpression 逻辑:

 if (_expressionManager->IsFinished())
 {
        for (auto &pair : _expManagers)
        {
            pair.second->UpdateMotion(_model, deltaSecs);
        }
 }
 else 
 {
        _expressionManager->UpdateMotion(_model, deltaSecs);
 }
Clone this wiki locally