填大坑游戏增加客户端托管功能

背景: 需要实现填大坑游戏的托管功能,没有托管功能导致用户恶意停止打牌,其他用户无限期等待。

 

大厅截图:

 

进入之后的托管:

 

实现:

首先分析各个类之间的关系:涉及到类gamescence gameplan tableplan,分别负责产场景 ,一场游戏,一局游戏

我们只需要在合适的时机建立一个定时器,到时之后触发相应逻辑即可。

合适的时机指的是有些收到数据包之后,判断是准备 开始 下注 弃牌等动作,开启定时器,定时器到时之后触发相应的操作,要求我们存储定时器能回调传递相应的事件标记。

这里面看上去没问题,其实是有问题的,因为没有考虑定时器销毁的问题,用户操作之后,需要销毁定时器。避免逻辑错误

难点在于定时器回调类内成员;游戏协议分析;动作分析;定时器销毁;

开发过程中发现,一些异常会导致数据错误,从而引发闪退等问题。所以保证逻辑正确很重要,要弄清每个类的构造时机和销毁时机,状态量的存储位置和初始化销毁时机。

增加时间配置:
根据日志定位函数 Scene:showConfigView(isFirst)
nowSelectGameConfig
bm.groupGameConfig .gameList .content 跟到reuuest中,发现request获取的数据不是最终展示的数据,说明1、使用了其他数据源 2、xxx
直接在group_create.lua中增加新的选项
不能点击时间问题,新增选项代码位置不对,调整到createScen即可
新增加计时器,用来判断是否应该托管:
gamesence中增加gameplane实例传递到table,gameplane中增加托管状态初始化和设置托管状态
增加位置:TablePlaneOperator:init,每一句调用一次
状态保存:GamePlaneOperator:init 没15局调用一次
PlayerPlaneOperator.lua
TablePlaneOperator.lua
GameMenu.lua

取消托管:
TDKgameScene:onTouchEvent

雷内函数调用失败:应该用:,其次是定义的时候要有class:funcion()

遇到的坑:

游戏编译问题,一直以为是androidstudio编译的,发现没有lua脚本,用cocos编译so文件,嵌入到工程中,也没有生效,弄了两天,问公司的人才知道,动态更新的。。。,之后lua压缩,上传到服务器,更新版本号码,注意redis缓存要更新,不然不会触发游戏更新的

第二个坑是ios的闪屏,查看日志发现是重复引用问题,这个不好解决,因为框架中的timer类有限制,不希望重新编译ios的app,尝试了新建类改变类名的方式,遇到其他问题,最后还是使用了第三个定时器类实现了功能,去除了重复引用

 

需求二:代理下面的玩家才能进入游戏,

这个实现比较简单,修改后台接口即可,需要厘清代理层级关系和对应的结构,没有的数据库操作自己加上,

坑点:tomcat工程更新单独一个class不行,需要部署整个工程。导入的工程各种问题,自己配置maven,解决依赖问题。

 

后面是有戏部署的过程:

cd /home/tools/redis-3.0.5/
/home/tools/redis-3.0.5/src/redis-server /opt/-/redis_4501.conf
/home/tools/redis-3.0.5/src/redis-server /opt/-/redis_6379.conf

sleep 3
cd /opt/memcached/bin/
./memcached -d -p 11215 -u root -m 64 -c 1024 -P /var/run/memcached/memcached_11215.pid
./memcached -d -p 11201 -u root -m 64 -c 1024 -P /var/run/memcached/memcached_11201.pid
cd /opt/apache-tomcat-7.0.70/bin/
./startup.sh
sleep 3
. /home/allcan.sh startHall

sleep 3
. /home/allcan.sh startGame

cd /opt/apache-tomcat-7.0.70_web/bin
sh startup.sh
//启动nginx,页面前端

启动nginx反向代理

 

 

posted @ 2018-11-15 15:55  张扬86  阅读(227)  评论(0编辑  收藏  举报
baidu