本节内容是通过 WebSocket 实现多人模式中的在线聊天系统。
1. 实现聊天系统前端界面
聊天系统整体可以分为两部分:输入框与历史记录。
我们需要先修改一下之前代码中的一个小 BUG,当在一个窗口中按 Q 时,另一个窗口中点击鼠标左键也能攻击,因为按下按键的事件被所有窗口都捕捉到了,这是不合理的。
我们之前监听的对象是 window,每个地图是一个 canvas 元素,因此我们可以绑定到 canvas 对象上。由于不是所有对象都能添加绑定事件的,因此我们还需要对 canvas 做一个修改,需要添加 tabindex 参数并将其聚焦后才能监听事件,首先在 GameMap 类中修改一下 canvas 对象:
1 | class GameMap extends AcGameObject { |
在 Player 类中修改:
1 | class Player extends AcGameObject { |
聊天的前端界面需要创建一个新的文件,我们在 ~/djangoapp/game/static/js/src/playground 目录下创建一个 chat_field 目录,并进入该目录创建 zbase.js 文件:
1 | class ChatField { |
然后在 AcGamePlayground 类中创建出来:
1 | class AcGamePlayground { |
现在在 Player 类中即可监听事件:
1 | class Player extends AcGameObject { |
然后我们还需要实现一下聊天区的 CSS 样式(在 ~/djangoapp/game/static/css 目录的 game.css 文件中):
1 | ... |
现在我们实现在历史记录区域里添加新消息的功能:
1 | class ChatField { |
2. 实现后端同步函数
我们先在 WebSocket 前端实现发送和接收消息的函数:
1 | class MultiPlayerSocket { |
然后实现后端代码:
1 | import json |
最后在前端的 ChatField 类中调用一下发送消息的函数即可:
1 | class ChatField { |
上一章:Django学习笔记-实现联机对战(下)。
下一章:无。