kb引擎经常会遇到的问题和处理办法。
self.dict[strP] = val
去修改不会触发属性同步,可以使用
setattr(self,strP,val),也可以利用dict方式来初始化数据而不发送给客户端。
在cell里也可以通过entityCall.base来调用base方法。
如果重新连线,内存有对象触发,我们可以处理断线重连。
这个回调函数可以返回如下常量值:
KBEngine.LOG_ON_ACCEPT:允许新的客户端与实体进行绑定,如果实体已经绑定了一个客户端,之前的客户端将被踢出。
KBEngine.LOG_ON_REJECT:拒绝新的客户端与实体绑定。
KBEngine.LOG_ON_WAIT_FOR_DESTROY:等待实体销毁后再进行客户端绑定。
#放置一些服务器的参数 systemInfo
import hashlib
serverRegular = 0 #是否正式服
writeMylog = 1 #是否写入mylog
isopen = 0 #是否放人,这个开关只有在正式服公网模式才会验证
然后在login的kbemain.py中定义
if(systemInfo.isopen != 1):
#如果关闭了停止登录,提示用户自定义消息1
errorno = KBEngine.SERVER_ERR_USER1
return (errorno, loginName, password, clientType, datas)
来开启和关闭服务器用户登录
所以如果你希望重连后不进入房间,那么可以在cell里的onDestroy清空相关数据。
玩家数量大会输出很多log,我们通过kbe\res\server\log4cxx_properties_defaults里面的log4cxx配置文件进行配置。
Loggers 六个级别:TRACE < DEBUG < INFO < WARN < ERROR < FATAL。
低级别的不会输出,例如设置了DEBUG则TRACE的不会输出。
有时候在连线时候加载卡死的函数会掉线,可以在引擎的目录kbengine\kbe\res\sdk_templates\client\unity修改模板,增加下面的脚本
修改KBEngine.cs
public void SetHeartTick(int heart)
{
_args.serverHeartbeatTick = heart / 2;
}
然后再游戏中,我们继承的类中添加修改心跳周期的函数,例如
public class KB : KBEMain
{
//设置心跳
public void SetHeartTick(int tick)
{
gameapp.SetHeartTick(tick);
}
//恢复心跳
public void ResetHeartTick()
{
gameapp.SetHeartTick(serverHeartbeatTick);
}
}
我们在卡死之前调用KB.inst.SetHeartTick(int.MaxValue);之后回复就可以了。