kbengine聊天广播的简单实现方法

本文详细介绍了如何使用KBEngine实现聊天广播功能。客户端通过注册事件并触发发送聊天信息,服务器接收到消息后广播给所有玩家。在Avatar.cs中监听和发送事件,同时在服务端声明暴露的方法并进行简单的广播实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建议再好好补充一下相关知识,你举的例子也挺乱的:lol

       KBEngine.Event.registerOut("sendMessagetoOtherClients",this,"sendMessagetoOtherClients")
       KBEngine.Event.registerOut("ReceiveMessage",this,"ReceiveMessage")
既然你能创造出2个事件来,怎么会不知道应该由谁去监听呢? 一般应该是你的当前角色实体监听既“Avatar.cs"监听事件后将信息发往服务器, 服务器再去做广播。

另外你不需要实现scripts\client中的内容,参考:https://github.com/kbengine/kben ... e_scripts/README.md

帮你梳理一下:
【客户端】
1: 在UI.cs注册聊天信息接收事件
KBEngine.Event.registerOut("ReceiveChatMessage",this,"ReceiveChatMessage")
并实现这个方法
void ReceiveChatMessage(string msg):
     // 服务器下发了聊天信息,这里显示信息到聊天窗口

2:在UI.cs实现发送聊天信息函数
    void sendChatMessage(string msg):
              // 向KBE插件触发一个信息发送事件
            KBEngine.Event.fireIn("sendChatMessage", msg)

3: KBE插件层需要监听到信息发送事件
   由于发送者只能是你的当前角色, 而demo中当前角色实体脚本名称为Avatar.cs,因此我们在这里监听发送信息事件

     public class Avatar : KBEngine.GameObject   
    {
       // 安装事件
        void installEvents()
        {
            // 只有你当前客户端这个角色需要注册,其他服务端同步过来的角色不需要监听这个事件
            if(isPlayer())
                  KBEngine.Event.registerIn("sendChatMessage",this,"sendChatMessage")
         }

         void sendChatMessage(msg)
         {
             // 向服务端发送聊天信息, 只需要发给baseapp就好了,到cellapp作用不大
              baseCall("sendChatMessage", msg);
         }

         void ReceiveChatMessage(msg)
         {
              // 服务端下发了聊天信息,这里触发一个事件交给UI层显示
             KBEngine.Event.registerIn("ReceiveChatMessage",this,"ReceiveChatMessage")
          }
        其他省略
        ...
        ...
     }

【服务端】
1: Avatar.def 声明暴露给客户端调用的方法
<BaseMethods>
      <sendChatMessage>
        msg...
       </sendChatMessage>
</BaseMethods>
<ClientMethods>
      <ReceiveChatMessage>
        msg...
       </ReceiveChatMessage>
</ClientMethods>

2: base\Avatar.py实现聊天发送方法(注意:这里只是简单实现,将信息广播给当前baseapp进程上的所有玩家,测试时不要开多个baseapp, 要做世界广播还应该考虑服务端上开了多个baseapp,那么需要将消息首先广播到所有的baseapp上,每个baseapp上再执行如下流程就行了)
def sendChatMessage(msg):
     for player in KBEngine.entities.values():
            if player.__class_.__name__ == "Avatar":
                     player.client.ReceiveChatMessage(msg)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值