当前位置: 首页 > news >正文

网站所有二级目录游戏网页设计模板图片

网站所有二级目录,游戏网页设计模板图片,国家认可提升学历正规机构,wordpress不使用缩略图状态机系统概述 在游戏开发中#xff0c;状态机是控制角色行为逻辑的核心系统。本文基于提供的代码#xff0c;分析技能编辑器中状态机系统的设计与实现#xff0c;特别是如何通过状态机管理复杂的技能逻辑。 状态机核心组件 1. 状态基类设计 (FSMStateBase) 状态基类是所…状态机系统概述 在游戏开发中状态机是控制角色行为逻辑的核心系统。本文基于提供的代码分析技能编辑器中状态机系统的设计与实现特别是如何通过状态机管理复杂的技能逻辑。 状态机核心组件 1. 状态基类设计 (FSMStateBase) 状态基类是所有具体状态的父类定义了状态的基本行为 class FSMStateBase { public:virtual void enter(); // 进入状态virtual void update(uint32 dwElapsed); // 更新状态virtual void exit(); // 退出状态virtual void refreshState() {}; // 刷新状态protected:CUnit *m_pUnit; // 关联的游戏单位std::string m_strPresentationName; // 当前状态的表现名称 }; 2. 状态机模板 (Fsm) 状态机模板类负责管理状态注册和状态切换 templatetypename classname, typename statetype, typename EVTID, typename PARAM class Fsm { public:void SetState(statetype state) {// 退出当前状态if (m_stateFunc.find(m_state) ! m_stateFunc.end()) {m_stateFunc[m_state].pBase-exit();}// 进入新状态m_last_state m_state;m_state state;if (m_stateFunc.find(m_state) ! m_stateFunc.end()) {m_stateFunc[m_state].pBase-enter();}}void RegisterStateFunc(statetype state, FSMStateBase* cls) {m_stateFunc[state].pBase cls;}void Update(float diff) {if (m_stateFunc.find(m_state) ! m_stateFunc.end()) {m_stateFunc[m_state].pBase-update(diff);}}private:statetype m_state; // 当前状态statetype m_last_state; // 上一个状态MapStateFunc m_stateFunc; // 状态映射表 }; 具体状态实现 1. 待机状态 (FSMStateStandBy) void FSMStateStandBy::enter() {Base::enter();ref_ptrCPresentationAction p m_pUnit-playStandbyPresentation();if (p) {Base::setPresentation(p-GetName());} }void FSMStateStandBy::update(uint32 dwElapsed) {Base::update(dwElapsed);this-updateStandby(dwElapsed); } 2. 移动状态 (FSMStateMove) void FSMStateMove::enter() {Base::enter();ref_ptrCPresentationAction p m_pUnit-playMovePresentation();if (p) {Base::setPresentation(p-GetName());} }void FSMStateMove::update(uint32 dwElapsed) {Base::update(dwElapsed);this-updateMove(dwElapsed); } 3. 受击状态 (FSMStateHitted) void FSMStateHitted::enter() {Base::enter();ref_ptrCPresentationAction p m_pUnit-playHittedPresentation();if (p) {Base::setPresentation(p-GetName());}// 特殊受击类型处理switch (mHittedType) {case zhuge_chuifeng:zhugeChuifengAction.readyToMove();break;} }void FSMStateHitted::update(uint32 dwElapsed) {Base::update(dwElapsed);// 处理特殊受击类型的位移switch (mHittedType) {case zhuge_chuifeng:zhugeChuifengAction.move(dwElapsed);break;} } 4. 技能状态 (FSMStateSkill) void FSMStateSkill::enter() {Base::enter();// 获取技能数据S_SKILL *skillData getData();// 播放技能表现ref_ptrCPresentationAction pa gSPConditonMgr-getPresentationBySkillData(skillData);if (pa) {Base::setPresentation(pa-GetName());// 注册回调pa-OnStopSignal.notify(this, FSMStateBase::OnStop);pa-OnFrameEventSignal.notify(this, FSMStateBase::OnFrame);// 设置技能数据pa-SetUserData(SKILL_DATA, Any(skillData));} }void FSMStateSkill::exit() {// 清理技能相关状态if (m_pUnit-isStatusById(IgnoreRTSRelation)) {m_pUnit-delStatusById(IgnoreRTSRelation);}Base::exit(); } 状态转换机制 1. 状态切换流程 2. 事件驱动的状态转换 // 注册事件处理 void RegisterEvt(statetype state, EVTID evt, classname* cls, statetype(classname::*f)(statetype, EVTID, PARAM)) {EvtProc proc m_mapTrans[state][evt];proc.notifyFunc.cls cls;proc.notifyFunc.imp f; }// 事件分发 void DispatchEvent(EVTID evt, PARAM pms) {// 查找当前状态的事件处理auto itS m_mapTrans.find(m_state);if (itS ! m_mapTrans.end()) {auto itE itS-second.find(evt);if (itE ! itS-second.end()) {// 执行事件处理函数并切换状态SetState((itE-second.notifyFunc.cls-*itE-second.notifyFunc.imp)(m_state, evt, pms));return;}} } 技能编辑器集成 1. 状态机在编辑器中的可视化 在技能编辑器中状态机可以直观地展示 [状态机视图] | 当前状态: 技能状态 (STATE_SKILL_1) | |------------------------------------| | 可转换状态:                        | |   - 待机状态 (STATE_STANDBY)       | |   - 移动状态 (STATE_MOVE)          | |   - 受击状态 (STATE_HITTED)        | |   - 死亡状态 (STATE_DEAD)          | |                                    | | 事件列表:                          | |   [动画事件] 帧事件(100): 触发伤害 | |   [动画事件] 结束事件: 返回待机    | 2. 状态与技能时间轴的关联 在技能编辑器中状态切换可以与时间轴上的关键帧关联 {tracks: [{type: State,keyframes: [{time: 0.0, state: STATE_SKILL_1},{time: 2.5, state: STATE_STANDBY}]}] } 3. 状态机调试功能 技能编辑器提供状态机调试工具 状态切换历史记录 当前状态变量查看 事件触发模拟 断点调试功能 高级特性实现 1. 状态过渡机制 void FSMStateMove::enter() {// 检查是否可以进入过渡状态if (m_pUnit-canEnterTransitionToMove(m_pUnit-getLastFsmPrt())) {m_pUnit-setFsmState(STATE_TRANSITION_MOVE);return;}// 否则进入普通移动状态Base::enter(); } 2. 动画事件驱动状态切换 void RegisterAniEvt(statetype state, EVENT_ANI_E aniEvent, statetype retState) {AniEvtProc proc m_mapAniTrans[state][aniEvent];proc.retState retState; }void DispatchAniEvent(EVENT_ANI_E evt, CPresentationAction* anim, int param) {auto itS m_mapAniTrans.find(m_state);if (itS ! m_mapAniTrans.end()) {auto itE itS-second.find(evt);if (itE ! itS-second.end()) {SetState(itE-second.retState); // 切换到新状态}} } 3. 状态特定的资源管理 void FSMStateDead::enter() {// 根据角色类型加载不同的死亡表现if (m_pUnit-isStatusById(Ghost)) {m_pUnit-doPressentation(ghost_dead);} else {m_pUnit-doPressentation(enter_dead);m_pUnit-doPressentation(enter_dead_effect);} } 性能优化策略 1. 状态对象池 class StatePool { public:FSMStateBase* Acquire(StateType type) {if (pool[type].empty()) {return CreateState(type);}auto state pool[type].back();pool[type].pop_back();return state-Reset();}void Release(FSMStateBase* state) {pool[state-GetType()].push_back(state);}private:std::mapStateType, std::vectorFSMStateBase* pool; }; 2. 状态切换优化 // 避免不必要的状态切换 void SetState(statetype newState) {if (m_state newState) {// 仅刷新状态不执行完整切换if (m_stateFunc.find(m_state) ! m_stateFunc.end()) {m_stateFunc[m_state].pBase-refreshState();}return;}// 执行完整状态切换... } 3. 基于状态的LOD优化 void FSMStateBase::update(uint32 dwElapsed) {// 根据距离相机的距离调整更新频率float distance Camera::Main()-DistanceTo(m_pUnit-Position);if (distance LOD_DISTANCE) {// 低细节更新每3帧更新一次if (frameCount % 3 0) {UpdateLOD(dwElapsed * 3);}} else {// 全细节更新UpdateFull(dwElapsed);}frameCount; } 总结 本文详细分析了技能编辑器中状态机系统的设计与实现核心要点包括 分层状态架构 基础状态机模板提供核心状态管理功能 具体状态实现游戏逻辑待机、移动、技能等 状态过渡机制实现平滑切换 事件驱动设计 支持普通事件和动画事件驱动状态转换 灵活的事件注册和分发机制 时间轴关键帧与状态绑定 编辑器集成 可视化状态机编辑 状态与技能表现关联 实时调试和模拟功能 性能优化 状态对象池减少内存分配 LOD策略按需更新 避免冗余状态切换 这种状态机设计为技能编辑器提供了强大的逻辑控制能力使设计师能够创建复杂的技能行为同时保持代码的可维护性和运行时性能。 最佳实践建议在技能编辑器中实现状态机时重点考虑 状态划分的粒度 - 不宜过细也不宜过粗 状态转换的可视化调试支持 与时间轴编辑器的深度集成 状态机的版本兼容性和序列化方案
http://www.w-s-a.com/news/639545/

相关文章:

  • 加强部门网站建设工作wordpress文章页横幅
  • 中英网站怎么做wordpress本地音乐
  • 万网提供的网站建设服务的具体项目祥云平台网站建设
  • ftp网站怎么看后台的代码网站 制作软件
  • 网站开发软件教程网站tag 怎么实现
  • 中国建设监理协会化工监理协会网站彩票站自己做网站吗
  • 170个可带链接锚文本外链的网站论坛微信上如何创建小程序
  • 用js来做网站亳州建设局网站
  • 做网站的公司利润多少呢纺织厂网站模板
  • 网页设计构建的基本流程宜宾seo网站建设
  • 西安网站开发公司价格保定徐水网站建设
  • 学做川菜下什么网站软件著作权和专利的区别
  • 百度网站标题东莞外包公司有哪些
  • 织梦增加网站英文名称网页界面设计特点
  • 企业如何进行网站建设棋牌代理平台
  • 韩国做美食网站有哪些seo优化在线诊断
  • 网站建设规划模板做擦边网站
  • 做网站台式还是笔记本网上下载的免费网站模板怎么用
  • 高校网站群管理系统凡科建站是永久的吗
  • 深圳网站建设服务电话网站通栏设计素材
  • 网站里面的视频功能怎么做网站名注册
  • 网站游戏下载厦门php网站建设
  • 沈阳关键词网站排名一台服务器做两个网站吗
  • 哪个行业该做网站但是没有做dom手表官方网站
  • 网站建设费 大创wordpress中函数get
  • 怎样建设个自己的网站首页有没有专门教做扯面的网站
  • 网站后台怎么添加模板教育类网站开发公司
  • 网站的外链是什么php创建一个网站
  • 语文建设 官方网站网络工程可以从事什么工作
  • 无锡便宜做网站如何下载网站模板