建議再好好補充一下相關知識,你舉的例子也挺亂的: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聊天廣播的簡單實現方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.