文章目录
客户端:负责接收玩家战斗指令,根据服务器的驱动进行表现
服务器:负责逻辑驱动
一、【第一章】游戏战斗系统核心抽象模型
1)技能过程定义
1)技能实体在生命过程中,可通过抽象划分为一系列的阶段
2)不同的技能类型即为这些阶段组合而成的过程
2)技能阶段(可以叫状态机,但这是时间驱动的各个阶段)
1)start 技能开始
2)Cost 消耗处理
3)reading 吟唱(读条)
4)channeling 引导(比如说持续性的对一个目标造成伤害或者一定的效果)
5)OnCast 出手(起手的时候通知客户端做预表现,做表现的期间掩盖网络延迟)
6)Project 弹道飞行中(飞镖做物理碰检测,战斗中引入物理碰撞是比较困难的事情)
7)OnHit 击中(打中的一些效果,实际上就是执行了一段lua脚本)
8)FInish 技能结束
补充:
技能在服务器就是一段数据+逻辑,也就是游戏编程精粹第一本的数据驱动的系统,也就是行为树
- 自述
在我的项目中,用的阶段是:
StageBegin技能开始->StagePrapare技能准备->StageGuide技能引导
->StageEffect技能作用->StatePost技能作用后->StageEnd技能作用结束
3)不同技能分类
- 瞬发技能
start-》cost-》oncast-》project-》onhit-》finish - 吟唱技能
start-》reading->cost->oncast->project->onhit->finish - 引导技能
start->cost->channel->oncast->project->onhit->effect->timeout? channel:finishi(时间没结束就回到channel) - combo技能(连击技能,大部分技能都是连招的技能)
①都是由很多个技能组合起来的
②与特殊引导技能的区别:combo技能需要玩家不停的点击 - 特殊引导技的技能 (实际上在一个时间轴上是连续释放的,但是在中间会被各种事件打断)
玩家只需要按一个技能,就可以连续的放很多技能
4)简单实现方式(定时器驱动不同阶段的状态机)
- 可配置的阶段内容
出手表现时间T1 ---->
飞行时间T2=distance/project_speed ---->
击中表现时间T3
二、【第二章】核心框架
1)战斗框架子系统(buff,也叫aura)
- 定义
依附于实体数据上持续一段时间的可交互对象
数据
逻辑
相关实体:event_source(时间产生的来源),event_target(技能打中的目标),deco_source(给技能上buff的这个目标,可以简单理解为施法者)
交互点:skillout、skillin