import Emitter from '../libs/tinyemitter'; import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../render'; const atlas = wx.createImage(); atlas.src = 'images/Common.png'; export default class GameInfo extends Emitter { constructor() { super(); this.btnArea = { startX: SCREEN_WIDTH / 2 - 40, startY: SCREEN_HEIGHT / 2 - 100 + 180, endX: SCREEN_WIDTH / 2 + 50, endY: SCREEN_HEIGHT / 2 - 100 + 255, }; // 绑定触摸事件 wx.onTouchStart(this.touchEventHandler.bind(this)) } setFont(ctx) { ctx.fillStyle = '#ffffff'; ctx.font = '20px Arial'; } render(ctx) { this.renderGameScore(ctx, GameGlobal.databus.score); // 绘制当前分数 // 游戏结束时停止帧循环并显示游戏结束画面 if (GameGlobal.databus.isGameOver) { this.renderGameOver(ctx, GameGlobal.databus.score); // 绘制游戏结束画面 } } renderGameScore(ctx, score) { this.setFont(ctx); ctx.fillText(score, 10, 30); } renderGameOver(ctx, score) { this.drawGameOverImage(ctx); this.drawGameOverText(ctx, score); this.drawRestartButton(ctx); } drawGameOverImage(ctx) { ctx.drawImage( atlas, 0, 0, 119, 108, SCREEN_WIDTH / 2 - 150, SCREEN_HEIGHT / 2 - 100, 300, 300 ); } drawGameOverText(ctx, score) { this.setFont(ctx); ctx.fillText( '游戏结束', SCREEN_WIDTH / 2 - 40, SCREEN_HEIGHT / 2 - 100 + 50 ); ctx.fillText( `得分: ${score}`, SCREEN_WIDTH / 2 - 40, SCREEN_HEIGHT / 2 - 100 + 130 ); } drawRestartButton(ctx) { ctx.drawImage( atlas, 120, 6, 39, 24, SCREEN_WIDTH / 2 - 60, SCREEN_HEIGHT / 2 - 100 + 180, 120, 40 ); ctx.fillText( '重新开始', SCREEN_WIDTH / 2 - 40, SCREEN_HEIGHT / 2 - 100 + 205 ); } touchEventHandler(event) { const { clientX, clientY } = event.touches[0]; // 获取触摸点的坐标 // 当前只有游戏结束时展示了UI,所以只处理游戏结束时的状态 if (GameGlobal.databus.isGameOver) { // 检查触摸是否在按钮区域内 if ( clientX >= this.btnArea.startX && clientX <= this.btnArea.endX && clientY >= this.btnArea.startY && clientY <= this.btnArea.endY ) { // 调用重启游戏的回调函数 this.emit('restart'); } } } }