📔
TerraCraft
  • TerraCraft
  • English
    • Mod Document
      • Mod Dev Official Tutorial
      • Mod API Document
        • Data Types and Enums
        • JSON
        • Entity
        • NPC
  • 简体中文(旧版教程)
    • 模组文档
      • Engine API
        • App
        • AssetBundle
        • AtlasInfo
        • AtlasTextureManager
        • Audio
        • Bytes
        • File
        • GameObject
        • GlobalHook
        • Graphics
        • Hotfix
        • Image
        • ImageInfo
        • IntegratedClient : IntegratedEnv
        • IntegratedEnv
        • JsonUtil
        • Log
        • MathHelper
        • Matrix
        • Path
        • Random
        • Rect
        • Rigidbody
        • TextureLocation
        • TextureManager
        • Transform
        • Vector2
        • Vector3
        • Vector4
      • Game API
        • Attack
        • ArrayList<T>
        • EffectUtils
        • Entity
        • LightingUtils
        • ModNpc
        • ModProjectile
        • Npc : Entity
        • NpcUtils
        • Projectile : Entity
        • ProjectileUtils
        • Reg
        • SoundUtils
        • Utils
      • 模组API文档
        • 数据类型、枚举类型
        • JSON API
        • 引用API
        • 注册信息API
        • 语言API
        • 通用API
        • 物品API
        • 实体API
        • 特效API
        • 抛射物API
        • 状态效果API
        • 附魔API
        • 玩家API
        • NPC API
        • 骨骼模型API
        • 光照API
        • 音效API
        • 方块API
        • 方块实体API
        • 地图API
        • 渲染API
        • 指令API
        • 用户图形界面UI
        • 其他API
      • 模组开发官方教程
        • ExampleMod源代码仓库
        • 1.0 教程对应游戏版本(Indev 1.1)
        • 1.1 开始
        • 1.2 安装Visual Studio Code
        • 1.3 配置模组环境
        • 1.4 认识模组路径
        • 1.5 认识JSON数据表
        • 1.6 第一个物品
        • 1.7 认识地图元素
        • 1.8 第一个图块TODO
        • 1.9 第一个家具TODO
        • 1.10 加入合成表TODO
        • 未完待续……
      • 模组数据表文档
        • 基本JSON类型
        • 模组配置表(tcmod.json)
        • 物品表(contents/items/...)
        • 物品配置表
        • 弹药表(ammos.json)
        • 状态效果表(buffs.json)
        • 音效配置表(sound_config.json)
        • 音效表(sounds.json)
        • 背景表(backgrounds.json)
        • 皮肤表(skins.json)
        • 着色器表(shaders.json)
  • 新版教程
    • 1 基础部分
      • 1.1 安装集成开发环境
      • 1.2 获取TerraCraft源码
      • 1.3 认识Lua
      • 1.4 Mod架构
      • 1.5 游戏主生命周期和主状态机
      • 1.6 Lua实战
      • 1.7 第一个物品
      • 1.8 本地化翻译
      • 1.9 配方系统初探和矿物字典
Powered by GitBook
On this page
  • 服务端
  • 客户端
  • 客户端状态
  • 动动手

Was this helpful?

  1. 新版教程
  2. 1 基础部分

1.5 游戏主生命周期和主状态机

在上个章节中,我们了解到游戏主要分为客户端线程和服务端线程,并共同执行相同的代码。本章节将主要介绍客户端和服务端两个线程的生命周期以及状态机。

服务端

在单人模式中,服务端为一个内置线程。在玩家点击进入世界后,服务端线程被创建,并在玩家整个游戏过程中一直存在。当发生玩家选择退出世界或者连接中断(单人游戏也可能会有谜之原因导致内网掉线),服务端线程将会退出。服务端线程没有状态机的概念,或者说只有一个GAMING状态。

客户端

对于客户端线程,生命周期则完全横跨整个游戏。在游戏程序加载资源时,客户端线程被创建。在游戏程序退出时,客户端线程被销毁。

客户端状态

客户端线程运行主状态机,你可以通过ClientState.current得到当前客户端线程的运行状态。总共有着如下状态:

  • LoadingResource:客户端正在导入游戏资源,导入完成后,切换到InMenu状态。

  • InMenu:客户端正在菜单界面,包括菜单主界面、选角、创角、选世界、创世界等界面。进入界面或者加入服务器后,切换到Joining状态;点击退出游戏按钮或者关闭游戏窗口后,切换到Exiting状态。

  • Exiting:客户端正在退出游戏,也就是整个app退出时,退出完成后客户端线程将被销毁。

  • Joining:客户端正在与服务端建立连接(注意单人模式也有服务端哦),此时已经构建服务端并处理初步连接事宜,连接成功后进入LoadingWorld状态,失败则进入LosingConnection状态。

  • LoadingWorld:客户端与服务成功连接,并且正在接收并加载服务端传过来的世界数据。加载完成后进入Gaming状态,断线会进入losingConnection状态。

  • Gaming:客户端正在进行游戏。安全退出世界或者单人模式是突发断线,进入SavingWorld状态;多人联机发生的断线,进入LosingConnection状态。

  • SavingWorld:客户端退出了世界,单人模式时正在等待服务端保存世界数据并结束服务端线程的状态。服务端退出后,客户端回到InMenu状态。

  • LosingConnection:断线状态,给予掉线提示并回到InMenu状态。

动动手

  1. 在客户端Gaming状态时,每帧打印I am in gaming。

答案:(TODO)

  1. 在客户端每个主状态切换时,打印当前状态。

答案:(TODO)

Previous1.4 Mod架构Next1.6 Lua实战

Last updated 2 years ago

Was this helpful?