Skip to content

Api指南

LightSun edited this page May 25, 2017 · 7 revisions

目前整个框架包含2个核心派系。 控制器 (IController及其子类) 和 团队管理(StateTeamManager)。 其他相关的比较重要的就是抽象类AbstractState. 那么只要把这3个类的API理解。整个框架就so easy了。

控制器 IController Api

它的api相当多。 毕竟代表了整个框架的核心api. 必调用的api.

    //设置状态器创建的工厂. 
    void setStateFactory(StateFactory<S, P> factory)
    //设置参数合并器.(一些实现类自动做了处理。)
     void setParameterMerger(ParameterMerger<P> merger) 
  • 1, 首选是对状态的 'CRUD'. 相应的会导致State的生命周期方法被调用.Enter/Reenter/Exit

    分当前状态和全局状态(全局状态方法较少)。
    • 增加: addState(int states, P extra) and addState(int states);

    • 删除:removeState(int states, P param) and removeState(int states).

    • 改: setState(int newStates, P extra) and setState(int newStates).

    • 查,分当前状态和全局状态。

      • 当前: getCurrentStates(List outStates) and getCurrentStates()
      • 全局: getGlobalStates(List outStates) and getGlobalStates().
  • 2, 状态的互斥。

比如一个状态的enter可导致与之互斥状态的自动退出。

    //添加一组相互互斥的状态。即,任意2个状态之间互斥。
    addMutexState(int[] groupState) 
    //添加2组状态,组1的任意一个状态和 组2的所有状态互斥。 同理组2.
    setMutexState(int[] groupState1, int[] groupState2);
  • 3, 事件锁定和解锁

比如我们写app常有这种需求。某个事件触发后,另外的事件将不再执行。直到该事件结束。

   //锁定指定的事件
   lockEvent(int... eventKeys)  
   // 解锁指定的事件. 
   unlockEvent(int...  keys)  
   // 指定的事件是否被锁定。
   isLockedEvent(int key) 
  • 4, 更新(针对游戏)

 //更新状态和消息. 给定的延迟和参数。
 void update(long deltaTime,  P param);
  • 5, 消息的处理.

   // 分发消息给状态,通过指定的策略和作用域.
   boolean dispatchMessage(Message msg, @PolicyType byte policy, @ScopeFlags byte scope)
   //删除指定的消息
   void removeMessage(int what)
   void removeMessage(Message expect)
  • 6, 其他包含状态的缓存,状态栈,共享参数等。

    //设置是否启用状态栈。启用后可以返回到上一个状态。
    void setStateStackEnable(boolean enable)
    //设置是否启用状态对象的缓存。以避免重复创建。
    void setStateCacheEnabled(boolean enable)
    //设置共享参数, 每当设置后,对状态的'增删改查' 都会携带这个参数。
    void setShareStateParam(P param)  
    //设置是否启用团队。
    void setTeamEnabled(boolean enable)

状态团队管理器StateTeamManager(直接子类,DefaultStateTeamManager)

StateTeamManager 可以管理所有的团队, 并辅助管理它的成员。

  • 1, 团队创建和管理(team)

   //创建团队
   static <P> Team<P> createTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer);
   static <P> Team<P> createTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer, 
			TeamCallback<P> callback);
   // 注册团队。 并返回对应的团队id号
   int registerTeam(Team<P> team);
   int registerTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer, TeamCallback<P> callback) ;
   int registerTeam(List<Member<P>> formal, @Nullable List<Member<P>> outer) ;
   int registerTeam(List<Member<P>> formal); 

   //反注册团队
   void unregisterTeam(Team<P> team) ;
   void unregisterTeam(int teamId);
   void unregisterAllTeam();

   //根据团队id获取团队
   Team<P> getTeam(int teamId);
   //获取有指定成员的所有团队(不会重复)。
   List<Team<P>> getTeams(Member<P> member, @Nullable List<Team<P>> outList) ; 
   //获取有指定正式成员的所有团队
   List<Team<P>> getTeamsAsFormal(Member<P> member, @Nullable List<Team<P>> outList);
   //获取有指定外围成员的所有团队
   List<Team<P>> getTeamsAsOuter(Member<P> member, @Nullable List<Team<P>> outList);
  • 2, 团队的更新

    //团队的更新
   void update(int teamId, long deltaTime, P param);
   void update(long deltaTime, P param);
  • 3, 分发团队消息.

   //分发消息给指定团队或者所有团队, policy代表策略。是广播还是消费策略。 
   //     memberFlags是否发送给成员(目前有正式formal和外围outer)的标志。
   boolean dispatchMessage(int teamId, Message msg, @PolicyType byte policy, int memberFlags);
   boolean dispatchMessage(Message msg, @PolicyType byte policy, int memberFlags);
  • 4, 成员创建和管理(member).

   //创建成员
   static <P> Member<P> createMember(IController<? extends AbstractState<P>, P> controller, 
             int states, byte cooperateMethod);
   static <P> Member<P> createMember(IController<? extends AbstractState<P>, P> controller, int states); 
   
   //添加正式成员
   boolean addFormalMember(int teamId, Member<P> member);
   boolean addFormalMemberStates(int teamId, IController<? extends AbstractState<P>, P> controller, int states);
   //添加外围成员
   boolean addOuterMember(int teamId, Member<P> member);
   boolean addOuterMemberStates(int teamId, IController<? extends AbstractState<P>, P> controller, int states);
  
   //删除正式成员或其部分状态
   boolean deleteFormalMember(int teamId, IController<? extends AbstractState<P>, P> controller);
   boolean deleteFormalMembeStates(int teamId, IController<? extends AbstractState<P>, P> controller,int targetStates);
   //删除外围成员或其部分状态
   boolean deleteOuterMember(int teamId, IController<? extends AbstractState<P>, P> controller);
   boolean deleteOuterMembeStates(int teamId, IController<? extends AbstractState<P>, P> controller,int targetStates);

** 状态AbstractState**(子类,SimpleState, DefaultState)

  • 1, 生命周期方法.

   //状态进入时调用
   void onEnter();
   //状态再次进入时调用、前提是之前已经enter并且没有exit
   void onReenter();
   // 状态退出时调用
   void onExit(); 
   //更新状态,被controller.update方法调用
   void onUpdate(long deltaTime, P param)
   //释放资源的时候被调用。 called by controller.dispose().
   void onDispose() ;
  • 2, 其他方法

   //是否被卸载
   boolean isDetached();
   //获取进入的次数.
   int getEnterCount();
   //获取挂载的controller. 如果被卸载,则抛出异常
   IController<?, P> getController();
   //通过controller获取owner.   如果被卸载,则抛出异常
   Object getOwner() ;
   //获取状态的id 一般是对应的flag. 2^n
   int getId();
   //处理消息。一般是通过controller.发送过来的。
   boolean handleMessage(Message msg) ;