学习ET6框架

游戏主循环(Game Loop)

电子游戏也属于一种程序,根据模型IPO(输入Input、处理Process、输出Output),我们简易总结出以下代码:

while (Game.IsRunning) {
  // (处理——游戏物理)物理帧(如果有物理引擎的话)
//Game.UpdatePhysics();



  // (输入)处理输入事件(键盘、滑鼠、手柄、触控屏 等等)
  Game.ProcessInputs();
  // (处理——游戏逻辑)逻辑帧
  Game.UpdateLogic();
  // (输出)渲染帧(表现帧:可能有除了屏幕以外的硬件需要处理输出事件,例如 游戏手柄的震动,或是街机特别的动效 等等)
  Game.UpdateDisplay();
}

这里要注意到 物理帧 要在 处理输入事件 之前,使得 物理帧 永远早于 逻辑帧、渲染帧,避免输入变化后,后两种帧类追赶物理帧。

ET6实现Game Loop的代码

可以注意到ET框架的帧更新是根据这个EventSystem

ET6客户端和服务端用同一种语言,并且共享代码

客户端服务端之间的网络消息两边完全共用一个文件即可,添加一个消息只需要修改一遍。

我们可以看到下图黄框处有一个小箭头,就是指Server.Model-MoveComponent LINKS Client.Model-MoveComponent。

下图是Server.Model.csproj内容对MoveComponent的Link描述。

网络游戏的状态帧同步

有了Game-Loop模型基础知识,我们可以直接将状态帧同步的处理填入到Game.UpdateLogic()的方法体当中。

ET6当中只负责数据转发,对游戏逻辑的数据同步,我们要根据自己的需求去实现。

每秒多少帧数?

就以 程序 呈现自己的 游戏故事 与 美术 而言,一开始先不去深入研究,大胆用 { 帧同步20帧、表现帧60帧 } / 每秒。

从ET6学C井

一段来自一个线程的代码到另一个线程执行,配合线程安全同步队列ConcurrentQueue<Action> queue。

爱玩游戏,做不出游戏,hazhala.cj