1. import utils from "./utils";
    2. import { FruitType } from "./fruits";
    3. let lastTime: number = Date.now(), // 记录上一次绘制的时间
    4. deltaTime: number = 0; // requestAnimationFrame 执行完成所用的时间 = 当前时间 - 上一次绘制的世界
    5. /**
    6. * 鱼妈妈与果实的碰撞检测
    7. */
    8. function fishAndFruitsCollision() {
    9. for (let i = fruits.num; i >= 0; i--) {
    10. // 假如或者就计算鱼儿与果实的距离
    11. if(fruits.alive[i]) {
    12. // 得到距离的平方根
    13. const distance = utils.getDistance(
    14. {x: fruits.x[i], y: fruits.y[i]},
    15. {x: fish_mother.x, y: fish_mother.y}
    16. );
    17. // 假如距离小于 500 让果实死亡
    18. if(distance < 500) {
    19. fruits.dead(i)
    20. score.fruitNum++; // 计分系统的果实数加一
    21. if(fruits.fruitType[i] === FruitType.Blue) { // 假如吃到蓝色道具果实,开启双倍模式
    22. score.doubleMode = 2;
    23. }
    24. }
    25. }
    26. }
    27. /**
    28. * 鱼妈妈与鱼宝宝的碰撞检测
    29. */
    30. function fishMotherAndBabyCollision() {
    31. // 得到距离的平方根
    32. const distance = utils.getDistance(
    33. {x: fish_baby.x, y: fish_baby.y},
    34. {x: fish_mother.x, y: fish_mother.y}
    35. );
    36. // 假如距离小于 900 就喂食给 baby,且必须要鱼妈妈吃到了果实才能喂给小鱼
    37. if (distance < 900 && score.fruitNum != 0) {
    38. fish_baby.recover();
    39. // 把能力给小鱼,果实数清零,计算分数一次
    40. score.reset()
    41. }
    42. }
    43. function gameLoop() {
    44. const now = Date.now()
    45. deltaTime = now - lastTime;
    46. // 给 deltaTime 设置上线
    47. if(deltaTime > 40) deltaTime = 40;
    48. // console.log(deltaTime);
    49. drawBackbround() // 画背景图片
    50. anemones.draw() // 海葵绘制
    51. fruits.draw() // 果实绘制
    52. fruits.monitor() // 监视果实,让死去的果实得到新生
    53. ctx_one.clearRect(0, 0, cvs_width, cvs_width); // 清除掉所有,再进行绘制,要不然的话会多次绘制而进行重叠。
    54. fish_mother.draw() // 绘制鱼妈妈
    55. fish_baby.draw() // 绘制鱼宝宝
    56. fishAndFruitsCollision() // 每一帧都进行碰撞检测
    57. fishMotherAndBabyCollision()
    58. score.draw() // 绘制分数
    59. requestAnimationFrame(gameLoop); // 不断的循环 gameLoop,且流畅性提升
    60. }
    61. function drawBackbround() {
    62. ctx_two.drawImage(bgPic, 0, 0, cvs_width, cvs_height)
    63. }
    64. export { deltaTime }
    65. export default gameLoop;