//导演类,控制游戏的逻辑
import {DataStore} from "./base/DataStore.js";
import {UpPencil} from "./runtime/UpPencil.js";
import {DownPencil} from "./runtime/DownPencil.js";
export class Director {
static getInstance() {
if (!Director.instance) {
Director.instance = new Director();
}
return Director.instance;
}
constructor() {
this.dataStore = DataStore.getInstance();
this.moveSpeed = 2;
}
createPencil() {
const minTop = DataStore.getInstance().canvas.height / 8;
const maxTop = DataStore.getInstance().canvas.height / 2;
const top = minTop + Math.random() * (maxTop - minTop);
this.dataStore.get('pencils').push(new UpPencil(top));
this.dataStore.get('pencils').push(new DownPencil(top));
}
supermanEvent() {
for (let i = 0; i <= 2; i++) {
this.dataStore.get('superman').y[i] =
this.dataStore.get('superman').supermanY[i];
}
this.dataStore.get('superman').time = 0;
}
//判断超人是否和障碍撞击
static isStrike(bird, pencil) {
let s = false;
if (bird.top > pencil.bottom ||
bird.bottom < pencil.top ||
bird.right < pencil.left ||
bird.left > pencil.right
) {
s = true;
}
return !s;
}
//判断超人是否撞击地板和障碍
check() {
const superman = this.dataStore.get('superman');
const land = this.dataStore.get('land');
const pencils = this.dataStore.get('pencils');
const score = this.dataStore.get('score');
//地板的撞击判断
if (superman.supermanY[0] + superman.supermanHeight[0] >= land.y) {
console.log('撞击地板啦');
this.isGameOver = true;
return;
}
//超人的边框模型
const supermanBorder = {
top: superman.y[0],
bottom: superman.supermanY[0] + superman.supermanHeight[0],
left: superman.supermanX[0],
right: superman.supermanX[0] + superman.supermanWidth[0]
};
const length = pencils.length;
for (let i = 0; i < length; i++) {
const pencil = pencils[i];
const pencilBorder = {
top: pencil.y,
bottom: pencil.y + pencil.height,
left: pencil.x,
right: pencil.x + pencil.width
};
if (Director.isStrike(supermanBorder, pencilBorder)) {
console.log('撞到水管啦');
this.isGameOver = true;
return;
}
}
//加分逻辑
if (superman.supermanX[0] > pencils[0].x + pencils[0].width
&& score.isScore) {
wx.vibrateShort({
success: function () {
console.log('振动成功');
}
});
score.isScore = false;
score.scoreNumber++;
}
}
run() {
this.check();
if (this.isReady){
this.dataStore.get('background').draw();
this.dataStore.get('land').draw();
this.dataStore.get('logo').draw();
this.dataStore.get('openButton').draw();
this.dataStore.get('superman').draw();
}else if (!this.isGameOver) {
this.dataStore.get('background').draw();
const pencils = this.dataStore.get('pencils');
if (pencils[0].x + pencils[0].width <= 0 &&
pencils.length === 4) {
pencils.shift();
pencils.shift();
this.dataStore.get('score').isScore = true;
}
if (pencils[0].x <= (DataStore.getInstance().canvas.width - pencils[0].width) / 2 &&
pencils.length === 2) {
this.createPencil();
}
this.dataStore.get('pencils').forEach(function (value) {
value.draw();
});
this.dataStore.get('land').draw();
this.dataStore.get('score').draw();
this.dataStore.get('superman').draw();
let timer = requestAnimationFrame(() => this.run());
this.dataStore.put('timer', timer);
} else {
console.log('游戏结束');
this.dataStore.get('end').draw();
cancelAnimationFrame(this.dataStore.get('timer'));
this.dataStore.destroy();
//触发微信小游戏垃圾回收
wx.triggerGC();
}
}
}
前端路上的雷哥
- 粉丝: 25
- 资源: 3
最新资源
- SDI+HDMI转USB3.0 采集卡FPGA方案,支持SDI HDMI输入 UVC免驱,YUV无损传输 最高支持1080P60采集输出
- 企业级的周报管理系统源码 采用了目前极为流行的扁平化响应式的设计风格,可以完美兼容电脑,pad,手机等多个平台 前端UI采用INSPINA实现,后台采用 SpringMVC + MyBatis +
- ADRC,自抗扰控制器,扩张状态观测器,ESO,模型预测控制算法MPC,自适应模型预测控制算法,时变模型预测控制算法,H无穷算法,混合灵敏度,鲁棒控制算法,四旋翼,直升机,控制算法设计,仿真模型,算法
- 车用级别专业无感方波 正弦波电机驱动控制IC,是专用IC没有电机驱动算法代码 开环电压,二 三相调制PWM,闭环力矩 速度模式控制 采用PWM输入实现调速 失步,过温,过流,欠压等多种诊断功能
- 基于分层极限学习机(HELM)的数据回归预测 matlab代码
- 超市收银与会员管理系统全套开发资料100%好用.zip
- 台达DVP15MC运动控制器气缸上下料动作程序,适合初学者使用 实际PLC测试运行,带台达触摸屏程序
- C#运动控制加视觉非标自动化软件框架,运动控制设计部分采用流程图式设计,可以根据框架自定义C#+halcon或者C#?VP全新 ,源码,该软件出自Green point
- MATLAB基于Simulink的行波故障测距 ,提出了基于MATLAB SIMULINK的输电线路故障行波仿真方法 在此基础上建立了基于分布参数模型的输电线路故障行波仿真平台 最后,以输电线路的
- 短路故障模型 Matlab simulink 质量过硬,非诚勿扰 可用于模拟电压暂降等电能质量问题,适配于本家的IEEE 33节点模型 此外,还可做①电力系统暂态稳定性分析,在各类短路故障情况
- 三菱PLC5u与台达变频器modbus RTU通讯 包括PLC程序,威纶通触摸屏程序,接线定义,变频器参数,说明书,注释都有详细,拿过来就能用
- 使用Vector的GENy工具,生成的UDS协议栈,包括CAN驱动程序,MCU为STM8系列,接口简单方便移植,量产程序
- ZQQ开发项目完整代码
- 混合整数二阶锥规划公式中具有不同动力学的定价惯性和频率响应 测试环境:MATLAB yalmip 关键词:凸优化,频率响应,边际定价,可再生能源 能源和频率服务的联合市场清算,包括定价方法 频率服务
- 两阶段,多周期的随机单位承诺 测试环境:MATLAB yalmip 关键词:电力系统动力学、频率响应、单位承诺、可再生发电的不确定性 解决单位承诺的随机版本,这是电力系统中的典型优化问题 该代码解
- 随机双重动态规划在可再生供应不确定性下的实时存储调度中的应用 测试环境:MATLAB 关键词:动态规划,经济调度,可再生能源,随机规划,储能 本文提出了一种受多区域可再生生产不确定性影响的传输约束经济
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈