同步操作将从 zum/ts-gameframework 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
服务端
+ 客户端
皆由 TypeScript 语言编写gate
是入口服务器(或者叫调度服务器)+登录服务器+集群管理服务器(简单三合一),有需要可以分离出来
backend
游戏逻辑服务器,可以设计成本游戏一样,一个服务器对应一个全局游戏,所有连接玩家都视作加入这个游戏。也可以加入房间的概念
frontend
游戏客户端(包含2个 demo),导入为 Creator 3.4.2 项目可运行Creator的 demo
使用 TSRPC 作为通讯框架,所以用了这个框架自带的代码生成/同步模块,导致各项目的目录名以及相对路径的固定(不熟悉乱改会导致出错)
PS:各项目根目录需要各自执行 npm i
,frontend
需要用Creator打开一次即可消除报错
(端口:7100,7101,7801 如果被占用将导致启动失败!)
npm install
(执行过一次即可)gate
和 backend
目录的 gf.*.config.json
里的配置修改 (主要是配置 redis 和 mysql )gate
目录,执行 npm run dev
backend
目录,执行 npm run dev
注意!依赖:redis,mysql
各端目录(gate、backend)执行 npm install
(执行过一次即可)
各端目录(gate、backend)执行 npm run buildTS
,然后打包下列文件:
./deploy
./dist
./node_modules
./gf.*.config.json (配置根据实际情况自行修改)
windows部署,提供了快捷部署服务方式,右键管理员运行 deploy/install_runasAdmin.cmd
即可
linux部署,可以使用 pm2
启动:pm2 start dist/index.js
进入 frontend
目录执行 npm install
(执行过一次即可)
浏览简易多人混战的例子:(frontend
导入 Creator后,启动 assets/occupationTheWar/occupationScene.scene
)
(预览模式下,要开第二个客户端则需要用
Private
窗口来打开预览地址,或者改用两种浏览器)
浏览vue实现的例子:进入 frontend
目录执行 npm run devVue
(如果没启动浏览器则手动打开输出的地址)
状态数据分离,如经典的ECS设计,方便状态同步,或者帧同步中用作中间状态缓存
输入操作分离:方便接入帧同步
其实只要是联机游戏,就需要做到上面说的设计,只是这里为了对接本框架而提出的设计原则
gf配置文件
,redis服务器和各服务器的ip/portGame
,然后调用 startGame()
(默认开启功能:帧同步+随机要求客户端同步状态给服务端)AfterFrames
:追帧消息,客户端根据消息中的状态数据+后续帧,来复原游戏SyncFrame
:服务端帧同步消息,默认每秒60帧(即每秒60条消息)InpFrame
:客户端的输入帧消息,建议统一收集,定时发送(如30ms发送一批),将在服务端收到的下一帧生效RequireSyncState
]:[可选,默认开启] 服务端要求客户端将本帧的游戏数据收集上来,使用SyncState
消息发送给服务端SyncState
]:[可选,默认开启] 客户端将游戏数据状态化,发送给服务端,用于后续追帧时能从这个状态+后续帧来快速复原游戏此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。