-
Notifications
You must be signed in to change notification settings - Fork 43
表情控制
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);
}