gameClient/assets/scripts/gamePanel.ts
2025-07-01 22:52:45 +08:00

52 lines
1.3 KiB
TypeScript

import { _decorator, Button, Component, EditBox, Label } from 'cc'
import { WsClient } from './network/wsclient'
const { ccclass, property } = _decorator
@ccclass('gamePanel')
export class gamePanel extends Component {
@property(EditBox)
private messageInput: EditBox = null
@property(Label)
private messageLabel: Label = null
@property(Button)
private sendButton: Button = null
private onSendButtonClick() {
const msg = this.messageInput.string.trim()
if (!msg) return
const ws = WsClient.Instance
const chatMsg = {
type: 'chat',
content: msg,
}
ws.send(chatMsg)
this.messageInput.string = ''
this.appendMsg('你:' + msg)
}
private onMessage(event: CustomEvent) {
try {
const msg = JSON.parse(event.detail)
if (msg.type === 'chat') {
this.appendMsg(`${msg.sender}:${msg.content}`)
}
} catch (error) {
console.log('收到非json消息:', event.detail)
}
}
private appendMsg(msg: string) {
this.messageLabel.string += msg + '\n'
}
start() {
this.sendButton.node.on(Button.EventType.CLICK, this.onSendButtonClick, this)
window.addEventListener(`ws-message`, this.onMessage.bind(this))
}
protected onDestroy(): void {
window.removeEventListener(`ws-message`, this.onMessage.bind(this))
}
update(deltaTime: number) {}
}