112 lines
2.4 KiB
JavaScript
112 lines
2.4 KiB
JavaScript
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');
|
||
}
|
||
}
|
||
}
|
||
}
|