又加一个动画时机,写代码没底,做不下去了感觉,囧
1 鼠标 切换背景成程序A的视图/程序B的视图 IsBackgroundA 用于表示当前背景的变量切换程序AB激活状态 IsAppAActive 用于表示当前激活程序的变量
2 快捷键 切换背景成程序A的视图/程序B的视图
切换程序AB激活状态
3 程序A激活状态下 鼠标滑过X区域时,激活B IsAppAActive =true&&CurrentActiveState 用于记录鼠标滑进X区域前的状态,方便滑出后赋值原始状态
鼠标滑出X区域时,恢复原始激活状态
执行程序B命令时,激活程序B
4 激活程序时添加动画 IsRightAnimation 来选择动画展示效果 , IsBackgroundA&&IsAppAActive==》来选择动画展示时机
5 不同设备间同步,添加发送命令和接受命令 需要多台设备同时开启程序进行同步 IsMaster 是否具有控制权
6 切换背景时添加动画 切换程序A动画
切换程序B动画
通过状态机整理逻辑: 定义的状态与触发事件 public enum ModelState { MainBackground, U3DBackground, U3DActive, U3DNotActive, TaskBarNormal } public enum ModelEvent { SetMainBackground, SetU3DBackground, SetU3DActive, SetU3DNotActive, IncCavansFunction, MouseEnterTaskbar, MouseLeaveTaskbar } 定义状态机事件 ... builder.In(ModelState.MainBackground) .On(ModelEvent.SetMainBackground) .On(ModelEvent.SetU3DBackground).Goto(ModelState.U3DActive); builder.In(ModelState.U3DBackground) .On(ModelEvent.SetMainBackground).Goto(ModelState.MainBackground); ... 为了统一操作流程,我将所有方法定义在状态进入时触发 ... builder.In(ModelState.MainBackground) .ExecuteOnEntry( () => { SetTaskbar(false, true); SetBackground(false); SetU3DActive(false); }); builder.In(ModelState.U3DActive) .ExecuteOnEntry( () => { StateMachineMsg += $"------------------------" + Environment.NewLine; StateMachineMsg += $"ModelState.U3DActive" + Environment.NewLine; SetTaskbar(true); SetU3DActive(true); SetBackground(true); }); ...
之后如果再有什么调整只需要给状态机增加状态和事件,或者调整状态就可以了。
状态及简单使用: 安装:我觉得主要难点是定义状态和事件,最开始用的时候状态和事件会分不开。
我们拿上下电梯举例:
1.0版本:电梯四个状态,开门,关门,上一层和下一层
代码描述:
builder.In(States.OnFloor) .On(Events.GoUp).Goto(States.MovingUp) .On(Events.GoDown).Goto(States.MovingDown) builder.In(States.MovingUp) .On(Events.Stop).Goto(States.OnFloor); builder.In(States.MovingDown) .On(Events.Stop).Goto(States.OnFloor); 2.0版本在楼层时,我们增加开门关门的语音提示,我们增加一个关门/开门状态,在进入状态时播放提示