首先感谢B站的大佬博主Sli97的教学视频。不适合小白观看,但是这个大佬码力深厚,代码优美如诗,有一定基础的可以反复观摩学习。
联机游戏跟单机游戏最大的不同在于联机需要实时同步多个客户端的数据。
要研究清楚联机游戏的前后端交互逻辑,应该先了解单机游戏的运行逻辑。
单机游戏的执行逻辑
这里介绍一种数据驱动的游戏框架。
(一)建立游戏State
state表明了当前客户端内所有可变元素的状态。如玩家有血条,位置,方向,速度等,子弹有位置,方向,速度,造成的伤害等。我们通过建立一个state,维护所有可变元素的状态。
export interface IState{
actor:IActor
bullets:IBullet[]
nextBulletId:number
}
export interface IVec2{
x:number
y:number
}
export interface IActor{
id:number
position:IVec2
direction:IVec2
hp:number
speed:number
}
export interface IBullet{
id:number
owener:number
position:IVec2
direction:IVec2
speed:number
}
以上是一个简单的示例,栗子中我们建立了IState这个接口用来管理全局游戏中的所有实体对象。
state : IState = {
actor:...
bullets:[
{...}&#