原理就是通过 Math.Sin 跟随海葵的频率摆动起来,跟海葵摆动一样的。

    1. import { cvs_height, cvs_width, ctx_one } from "./init";
    2. import { deltaTime } from "./game-loop";
    3. class Dust {
    4. dustPic: Array<HTMLImageElement> = []
    5. x: number[] = [];
    6. y: number[] = [];
    7. amp: number[] = [];
    8. No: number[] = []; // 渲染哪一张图片
    9. alpha = 0.6; // 角度
    10. num = 30 // 数量
    11. constructor() {
    12. for (var i = 0; i < 7; ++i) {
    13. this.dustPic[i] = new Image()
    14. this.dustPic[i].src = `assets/img/dust${i}.png`;
    15. }
    16. for (let i = 0; i < this.num; ++i) {
    17. this.x[i] = Math.random() * cvs_width;
    18. this.y[i] = Math.random() * cvs_height;
    19. this.amp[i] = 20 + Math.random() * 15;
    20. this.No[i] = Math.floor(Math.random() * 7)
    21. }
    22. this.alpha = 0
    23. }
    24. draw(){
    25. this.alpha += deltaTime * 0.001
    26. const l = Math.sin(this.alpha)
    27. for (let i = 0; i < this.num; ++i) {
    28. let no = this.No[i];
    29. ctx_one.drawImage(this.dustPic[this.No[i]], this.x[i] + l * this.amp[i] ,this.y[i])
    30. }
    31. }
    32. }
    33. export default Dust;

    好了,现在已经完成了。存在一些 bug,这里就不修复了。

    总算是体验了一把做游戏的感觉,感觉再也没下次了。