• 3898阅读
  • 6回复

Qt(QML)做的一个游戏框架,用JS来开发跨平台网络游戏 [复制链接]

上一主题 下一主题
离线leamus
 

只看楼主 倒序阅读 楼主  发表于: 2020-04-20
之前做了一个网络卡牌类游戏(www.yingyusha.com),觉得Qt做个游戏框架还是挺不错的,理论上C/S和B/S都能做,于是花了一段时间做出个框架Demo,这个Demo解决了以下一些问题(以下用Qt英语杀来作为例子):
1、跨平台
    个人浅显研究了各个平台下英语杀的表现效果,除了ios设备上没弄出来sqlite加密和操作有点卡顿(有可能是我用了多线程的原因吧)外,其他感觉还可以,对安卓的支持进行了较深入的研究(JNI和设备的一些功能),可以说,Qt的C/S跨平台模式还是相当不错的,B/S模式的话,除了Windows的MinGW不能做外(vs可以),其他都能做,而且可以与用C++交互。
2、网络通讯
    我自己用IOCP模型做了一个服务器(VC6做的内核,Qt封装后使用),运行在windows,支持TCP和UDP协议,TCP协议上又封装了一些常用的功能,比如加密、断线重连等等,QML中直接封装了数据发送和接收,都是以JSON来通信的。
3、数据库
    数据库用了MySQL,MySQL专门定义了一个表,存储用户自定义的字段(JSON格式),可能会拖累速度,当然如果做好成品的话直接可以转换为表。还可以存储一些二进制格式的文件
    本地的话,SQLite不用说,QML和Qt都支持,我又用了豆子写的加密SQLite版本,也加在了框架里。
4、其他特色和功能
    a、IO多线程:耗时的数据库操作和日志文件的读写,都采用了多线程模式,所以这个游戏服务器的稳定和优化我还是很有自信的~
    b、纯JS或QML编写游戏:由于框架本身是由Qt写的,所以Qt和QML的功能产品中都可以使用,而且我把一些该封装的都用C++封装好了(包括一些常用的安卓功能),直接可以在QML中使用,所以产品本身可以全部用QML来写;有些童鞋可能会JS但不太懂QML(毕竟还是有差别的),没关系,我把QML也封装了,直接用js函数来创建QML对象、绑定信号等等(这个使用起来可能还有些问题,得慢慢改进完善)。一句话,你用js可以做出来单机、联网的各种类型(RPG、即时战略、卡牌、AVG等等)的跨平台游戏(QML支持3d,会3d的童鞋甚至可以做3d游戏)。
    c、热更新:QML文件本身是以单独的资源文件来载入的,比较好更新,至于框架文件本身,我也准备用库的形式来热更新(不用每次改个小毛病都要重新下载一次apk和安装),当然这是下一步计划的,技术上是没问题了。

今天就写这么多,其实还有很多没写出来,比如框架的发布形式还没想好等等,也希望有童鞋能一起来完成,或者试用这个框架来提供宝贵的意见。
以后会慢慢更新使用教程和框架细节。
离线圣域天子

只看该作者 1楼 发表于: 2020-04-20
我是Qt开发的框架+lua做游戏玩法。
看来我们俩可以凑成一对哎~~~
离线leamus

只看该作者 2楼 发表于: 2020-04-20
回 圣域天子 的帖子
圣域天子:我是Qt开发的框架+lua做游戏玩法。
看来我们俩可以凑成一对哎~~~[表情] [表情] [表情]  (2020-04-20 10:43) 

哈哈,是啊是啊,你的框架有发布吗?或者用框架开发的什么项目,让我学习一下
离线圣域天子

只看该作者 3楼 发表于: 2020-04-20
回 leamus 的帖子
leamus:哈哈,是啊是啊,你的框架有发布吗?或者用框架开发的什么项目,让我学习一下[表情] (2020-04-20 14:17) 

除了Qt,全部为纯手工打造~~~支持Epoll & IOCP、Postgres、插件扩展功能、Lua/JS、多网关集群模式、协议转换插件等等。
离线leamus

只看该作者 4楼 发表于: 2020-04-21
有没有发布啊,让我研究研究
离线suoniao

只看该作者 5楼 发表于: 2021-08-07
回 圣域天子 的帖子
圣域天子:除了Qt,全部为纯手工打造~~~支持Epoll & IOCP、Postgres、插件扩展功能、Lua/JS、多网关集群模式、协议转换插件等等。[表情] (2020-04-20 23:19) 

游戏上线了吗
离线圣域天子

只看该作者 6楼 发表于: 2021-08-09
回 suoniao 的帖子
suoniao:游戏上线了吗 (2021-08-07 23:08) 

上线过的,公司关了,你看不到了
快速回复
限100 字节
 
上一个 下一个