我是靠谱客的博主 无聊柚子,最近开发中收集的这篇文章主要介绍kbengine:【菜鸟写的教程系列01】在线列表的例子,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

用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传进来加到那个列表里

reqPlayerSumAccount实体调用来获取在线人数的方法,把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】在线列表的例子所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部