本节内容是通过 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学习笔记-实现联机对战(下)。
下一章:无。