hero_logic
2016-10-08 16:53:34 0 举报
英雄逻辑是一种思维模式,它强调个人的勇气、决心和牺牲精神。这种逻辑认为,一个人应该为了更大的目标,如保护他人或维护公正,而愿意承担风险和牺牲。英雄逻辑在许多文化和故事中都有体现,比如超级英雄电影,主角常常为了拯救世界而不顾自身安危。然而,英雄逻辑也引发了一些争议,因为它可能导致过度的自私或自我牺牲,而且忽视了集体行动的重要性。总的来说,英雄逻辑是一种强大的思维方式,它可以激励人们去追求更高的目标,但也需要谨慎使用,以避免产生负面的后果。
作者其他创作
大纲/内容
GameObjStateAttack
+ PrepareActionList()+ PlayActionList()+ PlaySkill()......
......
GameObjStateControl
+ RunStateData() //运行当前添加的新状态+ CreateStateDataByType()+ Process()+ AddState() //添加新状态+ ClearAddState()+ StopRunState()+ StopAllState()+ DestroyRunState() //销毁当前状态机,运行新的状态机......
- GameObj* control_obj_ //当前控制器控制的对象- GameObjStateData* curr_state_data_ //当前状态机的数据- GameObjStateData* next_state_data_ //下一个状态机的数据- GameObjStateBase* run_state_ //当前运行的状态机- GameObjLogicMove* logic_move_ //移动逻辑- GameObjStateData* add_state_......
GameObjStateStand
RunStateData()
GameObjDataManager
+ GetTagData()+ GetPickListBySN()+ GetNearPickID()......
+ int fight_msg_count
OnUpdate()
GameObjData
+ type()......
- GAME_OBJ_TYPE type_......
GameObjManager
+ Process()......
Create和UpdateObjData里面都对hero_data_这个成员变量做了赋值
SkillModule
+ OnUpdate()......
OnTouchHandler()、OnUpdate()
GameObjStateBase
+ Play() //播放这个状态的一些动作+ Pass()+ Stop() //停止播放这个动作+ CheckNextState() //检查下一个状态能否打断当前的这个状态+ PreCheckState()+ UpdateState() //更新状态+ PreUpdateState() //更新保存的上一个状态......+ OnInfoChange()+ OnActorShow()+ OnModelChange()......
+ GAME_OBJ_STATE_TYPE type_ //当前状态机的类型+ GameObj* control_obj_ //状态机管理的目标显示对象+ star::StringArray list_action_ //当前状态机的动作播放列表+ int play_left_time_ //当前播放的动作的播放的剩余时间+ STATE_PLAY_STATE play_state_ //当前播放状态+ GameObjStateData* state_data_ //状态机的数据+ star::Vector3 tag_pos_ //目标点+ StateLogicList list_logic_ //逻辑单元+ bool need_stop_move_ //运行时是否需要停止移动逻辑......
这里的OnUpdate方法里面包含了current_state_-OnUpdate()当游戏进入到世界场景后,这个current_state_的实例对象就变成了GameStateWorld,也就是后面每一帧都是GameStateWorld-OnUpdate()
Game
+ Init()+ Logic()+ OnTouchHandler()......
Logic()
这里的一些以On开头的一些函数用来处理一些其他的逻辑,比如中断寻路、使用轻功加速等
GameHero
+ AddState()+ StopCurState()+ GetCurrStateType()+ Process()+ UpdatePosition()......
- GameObjStateControl* control_state_ //状态控制机......
在这些状态类的Play函数中,核心就是control_obj-PlayAction(actionStr),而control_obj_是传递进来的GameObj对象;然后PlayAction中则会调用GameObj的成员actor_的PlaySkill方法
通过GameObjDataManager的单例来获取当前操作的obj数据,从这个GameObjData里面可以知道当前的obj是不是hero
GameObjStateMove
GameObjStateData
+ CopyData()......
+ GAME_OBJ_STATE_TYPE type+ bool is_dir //是否使用摇杆+ bool is_path //是否使用路径......+ int fly_time_total //浮空总时间+ int fly_time_down //下落时间+ int fly_time_up //上浮时间......+ int skill_sn //技能sn+ bool is_skill_auto //是否挂机......+ star::i64 throw_parent_id //被谁投掷+ int throw_state //投掷的状态......+ star::String death_action //死亡播放的动作......+ int govern_time //强控状态机的持续时间......+ bool show_enteract //能否进入场景动画......
UseSkill()、OnAttackBtnUp()
在GameStateWorld的OnUpdate中,GameStateWorld的成员变量modules_会遍历一遍,并全部执行这些module的OnUpdate函数,StickModule的OnUpdate就是其中一个
GameModule
+ OnUpdate()+ PlayAction()......
- LORD::ActorClient* actor_; //当前的主Actor;......
在GameObj类里面有Process和UpdatePosition这两个方法(都是虚方法),每一次Process都会执行UpdatePosition,同时也会执行GameObj类里面GameObjStateControl对象的Process。在UpdatePosition里面,首先先获得objData,然后得到pos,objData-pos(),然后。。使用引擎提供的接口设置位置,actor_-SetPosition()、actor_-SetDirByRotate()、actor_SetScale()。。。
玩家点击技能图标,从Lua中调用SkillModule里面的方法;触碰事件为Down的时候调用SkillModule::UseSkill;触碰事件为Up的时候调用SkillModule::OnAttackBtnUp。
GameObjModule
+ OnHeroStateChange()+ OnObjStateChangeStart()+ OnHeroStateChange()......
GameStateMgr
- GameState* current_state_......
提供技能数据、技能状态机入口;
GameStateWorld
+ OnUpdate()+ OnTouchHandler()......
Process()
在GameObjStateControl的AddState函数中,新创建了一个GameObjStateData的实例后,GameObjStateControl会调用自身的CheckAddState、RunStateData、CheckTagState等方法,这些方法会调用CreateStateByType来创建一个新的状态,当新的状态创建成功后,会执行这些状态的Play函数
GameObj
+ PlayAction()......
GameHeroManager
GameHuman
+ Process()+ UpdatePosition()......
在GameObjStateControl中的AddState函数中被调用,会根据点击技能按钮的时候传进来的state.type创建一个新的GameObjStateData实例
从GameHeroManager的单例中直接获取GameHero,GameHeroManager::Instance()-hero_obj()然后调用GameHero中的AddState等函数然后GameHero再调用自身的GameObjStateControl变量的AddState函数
StickModule
0 条评论
下一页