建议再好好补充一下相关知识,你举的例子也挺乱的: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)
kbengine聊天广播的简单实现方法
最新推荐文章于 2021-03-05 10:38:51 发布