概述
用KBE用了小半年 还是菜鸟级别 最近感觉会了些东西,发出来共享一下哈~
谢谢KBE大大的指导以及青蛙大神的视频,让我学会了部分用的方法,我是想做一个卡牌的游戏,这个帖子就是一个在线列表的例子。
基础:
看完青蛙的教程
主要内容:
维护一个实体
实体间通信
正文:
首先在kbe的脚本文件夹里新建一个实体的脚本文件,这里就弄一个Hall.py
与之对应的,需要在assetsscriptsentity_defs文件夹里新建一个Hall.def的文件
还有在entities.xml文件里注册该实体,三个文件按以下内容(供参考)
首先是Hall.py这个文件
# -*- coding: utf-8 -*-
import KBEngine
import random
import time
from KBEDebug import *
class Hall(KBEngine.Base):
def __init__(self):
DEBUG_MSG("Hall加载完成")
KBEngine.Base.__init__(self)
#储存大厅
KBEngine.globalData["Halls"] = self
# 存放所有在线玩家mailbox
self.player = []
#定时更新当前玩家
self.addTimer(3, 6, 1)
def onTimer(self, id, userArg):
DEBUG_MSG(id, userArg)
#更新在线人数
if userArg == 1:
self.UpdataPlayer()
def UpdataPlayer(self):
#此函数更新在线人数
for i in range(len(self.player)):
if self.player[i].isDestroyed == True:
del self.player[i]
DEBUG_MSG("当前在线人数:%i" % len(self.player))
def reqAddPlayer(self,player):
#此函数添加上线玩家入列表
if player in self.player:
return
self.player.append(player)
def reqPlayerSum(self,player):
#此函数是为了获得在线人数
player.OnPlayerSum(len(self.player))
下面大概说一下上面的Hall.py
前面的都差不多
在init里面KBEngine.Base.__init__(self)我也不太懂。。
KBEngine.globalData["Halls"] = self
这个是把这个实体注册到kbe的全局变量里(globalData),这样别的脚本调用这个就直接KBEngine.globalData["Halls"].XXXX就能调用了
下面那个定时器是更新在线玩家用的 UpdataPlayer里会删除列表里的无效实体
后面reqAddPlayer 是把Account实体的Mailbox传进来加到那个列表里
reqPlayerSum是Account实体调用来获取在线人数的方法,把mailbox传进来 再调用mailbox的方法把在线人数传出去
然后是Hall.def
<root>
<Implements>
</Implements>
<Properties>
</Properties>
<BaseMethods>
<UpdataPlayer>
<!--更新有多少在线玩家的方法 -->
</UpdataPlayer>
<reqAddPlayer>
<!--玩家上线向汇报的方法 -->
<Arg> MAILBOX </Arg>
</reqAddPlayer>
</BaseMethods>
<CellMethods>
</CellMethods>
</root>
我是这样写的 中间BaseMethods里我也不知道需要加多少方法 但是写到这么多就可以用了 好像是外部调用才写
Entities.xml里面加一行 <Hall/>就行了
除此之外,还需要在assetsscriptsbasekbengine.py里面添加初始化Hall.py的代码,自己写的时候就是没加。。。感谢kbe的指正。。。
def onBaseAppReady(isBootstrap):
"""
KBEngine method.
baseapp已经准备好了
@param isBootstrap: 是否为第一个启动的baseapp
@type isBootstrap: BOOL
"""
INFO_MSG('onBaseAppReady: isBootstrap=%s, bootstrapGroupIndex=%s, bootstrapGlobalIndex=%s' %
(isBootstrap, os.getenv("KBE_BOOTIDX_GROUP"), os.getenv("KBE_BOOTIDX_GLOBAL")))
if isBootstrap:
# 创建大厅
KBEngine.createBaseLocally( "Hall", {} )
这个方法改写成这样就行了 主要后三行 夹着前面注释可以看的懂 就不说了
然后在assetsscriptsbaseAccount.py里面写一些(官方最小assert里面就有 我就是用那个写的)
首先
def __init__(self):
KBEngine.Proxy.__init__(self)
"""
在在线玩家列表注册自己
"""
KBEngine.globalData["Halls"].reqAddPlayer(self)
Init加一行 就最后的 在初始化的时候注册自己
而后
def reqPlayerSum(self):
KBEngine.globalData["Halls"].reqPlayerSum(self)
def OnPlayerSum(self,sum):
self.client.onGetPlayerSum(sum)
添加这样两个方法
第一个允许客户端调用 来获取在线玩家数量
第二个方法是Hall.py调用的 来获取人数的 顺便给调用客户端方法 来通知客户端
客户端部分
Account.cs里添加一个得到的方法
public void onGetPlayerSum(object data)
{
Event.fireOut("onGetPlayerSum", data);
}
客户端部分青蛙视频里说的很好 这里就不赘述了 这样 一个在线人数列表维护的例子就完了
菜鸟经验~欢迎指正 哈
最后
以上就是无聊柚子为你收集整理的kbengine:【菜鸟写的教程系列01】在线列表的例子的全部内容,希望文章能够帮你解决kbengine:【菜鸟写的教程系列01】在线列表的例子所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复