import { _decorator, Component, instantiate, Label, Node, Prefab, Vec3, } from "cc"; import { EventDispatcher } from "../libs/EventDispatcher"; import { GlobalData } from "../config/GlobalData"; const { ccclass, property } = _decorator; @ccclass("NoteManager") export class NoteManager extends Component { // 音符的预制体 @property(Prefab) private notePrefab: Prefab = null; // 基准线的节点 @property(Node) lineNode: Node = null; // 定义基准线的坐标 private linePosition: Vec3 = new Vec3(0, 0, 0); // 显示当前有多少个音符的 label @property(Label) noteCountLabel: Label = null; // 音符的数组 private noteArray: any[] = [ { trackType: 1, timePoint: 4.43389999999851, }, { trackType: 1, timePoint: 4.480899999998511, }, { trackType: 2, timePoint: 5.118199999999255, }, { trackType: 2, timePoint: 5.1805999999977645, }, { trackType: 2, timePoint: 5.42189999999851, }, { trackType: 2, timePoint: 5.480899999998511, }, { trackType: 1, timePoint: 6.268899999998511, }, { trackType: 1, timePoint: 6.330699999999255, }, { trackType: 1, timePoint: 6.5295, }, { trackType: 1, timePoint: 6.580699999999255, }, { trackType: 2, timePoint: 6.95729999999702, }, { trackType: 2, timePoint: 6.997199999999256, }, { trackType: 1, timePoint: 7.421, }, { trackType: 1, timePoint: 7.480599999997765, }, { trackType: 2, timePoint: 8.37989999999851, }, { trackType: 2, timePoint: 8.429899999998511, }, { trackType: 1, timePoint: 9.286099999997763, }, { trackType: 1, timePoint: 9.347399999998508, }, { trackType: 1, timePoint: 9.479499999999998, }, { trackType: 1, timePoint: 9.53089999999851, }, { trackType: 2, timePoint: 10.285999999999998, }, { trackType: 2, timePoint: 10.347399999998508, }, { trackType: 1, timePoint: 10.62179999999702, }, { trackType: 1, timePoint: 10.66389999999851, }, { trackType: 1, timePoint: 10.982099999997764, }, { trackType: 0, timePoint: 11.350799999997019, }, { trackType: 0, timePoint: 11.413999999999998, }, { trackType: 1, timePoint: 12.4055, }, { trackType: 1, timePoint: 12.46389999999851, }, { trackType: 2, timePoint: 13.26289999999851, }, { trackType: 2, timePoint: 13.314, }, { trackType: 2, timePoint: 13.468699999999256, }, { trackType: 2, timePoint: 13.530699999999253, }, { trackType: 1, timePoint: 14.259199999999254, }, { trackType: 1, timePoint: 14.313099999997764, }, { trackType: 1, timePoint: 14.526499999999999, }, { trackType: 1, timePoint: 14.58029999999702, }, { trackType: 1, timePoint: 14.976899999998508, }, { trackType: 1, timePoint: 15.030399999998508, }, { trackType: 0, timePoint: 15.382199999999255, }, { trackType: 0, timePoint: 15.430499999999999, }, { trackType: 0, timePoint: 15.497099999997765, }, { trackType: 0, timePoint: 15.563499999999998, }, { trackType: 0, timePoint: 15.630299999997018, }, { trackType: 1, timePoint: 16.35039999999851, }, { trackType: 1, timePoint: 16.413799999997018, }, { trackType: 2, timePoint: 16.836699999999254, }, { trackType: 2, timePoint: 16.896599999997765, }, { trackType: 1, timePoint: 17.383, }, { trackType: 1, timePoint: 17.445599999997764, }, { trackType: 2, timePoint: 17.967, }, { trackType: 2, timePoint: 18.030599999997765, }, { trackType: 1, timePoint: 18.43679999999702, }, { trackType: 1, timePoint: 18.497099999997765, }, { trackType: 0, timePoint: 19.406199999999256, }, { trackType: 0, timePoint: 19.46379999999702, }, { trackType: 0, timePoint: 19.5305, }, { trackType: 0, timePoint: 19.597099999997763, }, { trackType: 0, timePoint: 19.663699999999256, }, { trackType: 1, timePoint: 21.6165, }, { trackType: 1, timePoint: 21.680599999997764, }, { trackType: 2, timePoint: 22.436599999997764, }, { trackType: 2, timePoint: 22.496699999999255, }, { trackType: 1, timePoint: 23.317999999999998, }, { trackType: 1, timePoint: 23.38039999999851, }, { trackType: 1, timePoint: 23.544, }, { trackType: 1, timePoint: 23.596999999999998, }, { trackType: 1, timePoint: 23.934099999997763, }, { trackType: 1, timePoint: 23.997, }, { trackType: 0, timePoint: 24.32879999999702, }, { trackType: 0, timePoint: 24.380599999997763, }, { trackType: 0, timePoint: 24.447, }, { trackType: 0, timePoint: 24.5135, }, { trackType: 1, timePoint: 25.382, }, { trackType: 1, timePoint: 25.447099999997764, }, { trackType: 2, timePoint: 26.14579999999702, }, { trackType: 2, timePoint: 26.197099999997764, }, { trackType: 2, timePoint: 26.388499999999997, }, { trackType: 2, timePoint: 26.44689999999851, }, { trackType: 1, timePoint: 27.1675, }, { trackType: 1, timePoint: 27.23029999999702, }, { trackType: 1, timePoint: 27.444999999999997, }, { trackType: 1, timePoint: 27.495499999999996, }, { trackType: 1, timePoint: 27.885599999997762, }, { trackType: 1, timePoint: 27.947099999997764, }, { trackType: 0, timePoint: 28.301399999998512, }, { trackType: 0, timePoint: 28.363799999997017, }, { trackType: 0, timePoint: 28.430299999997022, }, { trackType: 0, timePoint: 28.497199999999257, }, { trackType: 1, timePoint: 29.446099999997767, }, { trackType: 1, timePoint: 29.496999999999996, }, { trackType: 2, timePoint: 30.194299999997018, }, { trackType: 2, timePoint: 30.246899999998508, }, { trackType: 2, timePoint: 30.436299999997022, }, { trackType: 2, timePoint: 30.49709999999776, }, { trackType: 1, timePoint: 31.269099999997767, }, { trackType: 1, timePoint: 31.330499999999997, }, { trackType: 1, timePoint: 31.478599999997765, }, { trackType: 1, timePoint: 31.52979999999702, }, { trackType: 2, timePoint: 31.916399999998507, }, { trackType: 2, timePoint: 31.979799999997017, }, { trackType: 1, timePoint: 32.301399999998516, }, { trackType: 1, timePoint: 32.363699999999255, }, { trackType: 1, timePoint: 32.4305, }, { trackType: 1, timePoint: 32.49719999999926, }, { trackType: 1, timePoint: 32.56369999999926, }, { trackType: 0, timePoint: 33.349799999997025, }, { trackType: 0, timePoint: 33.396, }, { trackType: 1, timePoint: 33.863899999998516, }, { trackType: 1, timePoint: 33.91369999999926, }, { trackType: 0, timePoint: 34.4225, }, { trackType: 0, timePoint: 34.48029999999702, }, { trackType: 1, timePoint: 34.945299999997026, }, { trackType: 1, timePoint: 34.996500000000005, }, { trackType: 2, timePoint: 35.49529999999702, }, { trackType: 2, timePoint: 35.54719999999926, }, { trackType: 1, timePoint: 36.452899999998515, }, { trackType: 1, timePoint: 36.51369999999926, }, { trackType: 1, timePoint: 36.58039999999851, }, { trackType: 1, timePoint: 36.647000000000006, }, { trackType: 2, timePoint: 37.5615, }, { trackType: 2, timePoint: 37.61359999999777, }, { trackType: 2, timePoint: 37.93059999999777, }, { trackType: 2, timePoint: 37.97939999999851, }, { trackType: 1, timePoint: 38.436699999999256, }, { trackType: 1, timePoint: 38.630500000000005, }, { trackType: 1, timePoint: 38.6805, }, { trackType: 0, timePoint: 39.479099999997764, }, { trackType: 0, timePoint: 39.53029999999702, }, { trackType: 0, timePoint: 39.87919999999926, }, { trackType: 0, timePoint: 39.930399999998514, }, { trackType: 1, timePoint: 40.23009999999777, }, { trackType: 1, timePoint: 40.27939999999851, }, { trackType: 0, timePoint: 40.704, }, { trackType: 1, timePoint: 40.981500000000004, }, { trackType: 2, timePoint: 41.405099999997766, }, { trackType: 2, timePoint: 41.463399999998515, }, { trackType: 1, timePoint: 43.42179999999702, }, { trackType: 1, timePoint: 43.47939999999851, }, { trackType: 1, timePoint: 43.793000000000006, }, { trackType: 1, timePoint: 43.84689999999851, }, { trackType: 1, timePoint: 44.005500000000005, }, { trackType: 1, timePoint: 44.06359999999777, }, { trackType: 2, timePoint: 44.27929999999702, }, { trackType: 2, timePoint: 44.330000000000005, }, { trackType: 1, timePoint: 44.928899999998514, }, { trackType: 1, timePoint: 44.980000000000004, }, { trackType: 1, timePoint: 45.350199999999255, }, { trackType: 1, timePoint: 45.41359999999777, }, { trackType: 0, timePoint: 46.48019999999926, }, { trackType: 0, timePoint: 46.530099999997766, }, { trackType: 0, timePoint: 46.728399999998516, }, { trackType: 0, timePoint: 46.78029999999702, }, { trackType: 1, timePoint: 47.47979999999702, }, { trackType: 1, timePoint: 47.53029999999702, }, { trackType: 1, timePoint: 47.820699999999256, }, { trackType: 1, timePoint: 47.87939999999851, }, { trackType: 1, timePoint: 48.36259999999777, }, { trackType: 1, timePoint: 48.414199999999255, }, { trackType: 1, timePoint: 48.78219999999926, }, { trackType: 1, timePoint: 48.846799999997025, }, { trackType: 1, timePoint: 48.9495, }, { trackType: 1, timePoint: 49.01339999999851, }, { trackType: 2, timePoint: 49.378, }, { trackType: 2, timePoint: 49.430099999997765, }, { trackType: 1, timePoint: 49.949899999998514, }, { trackType: 2, timePoint: 50.39359999999777, }, { trackType: 2, timePoint: 50.44639999999851, }, { trackType: 1, timePoint: 50.911199999999255, }, { trackType: 1, timePoint: 50.963399999998515, }, { trackType: 2, timePoint: 51.37609999999777, }, { trackType: 2, timePoint: 51.43019999999926, }, { trackType: 1, timePoint: 52.005500000000005, }, { trackType: 1, timePoint: 52.06359999999777, }, { trackType: 1, timePoint: 52.178000000000004, }, { trackType: 1, timePoint: 52.23029999999702, }, { trackType: 1, timePoint: 52.32469999999926, }, { trackType: 1, timePoint: 52.379899999998514, }, { trackType: 0, timePoint: 52.93409999999777, }, { trackType: 1, timePoint: 53.911, }, { trackType: 1, timePoint: 53.9635, }, { trackType: 2, timePoint: 54.896399999998515, }, { trackType: 2, timePoint: 54.946599999997765, }, { trackType: 1, timePoint: 55.91729999999702, }, { trackType: 1, timePoint: 55.9795, }, { trackType: 0, timePoint: 57.00569999999925, }, { trackType: 0, timePoint: 57.06329999999703, }, { trackType: 1, timePoint: 57.41459999999776, }, { trackType: 1, timePoint: 57.463399999998515, }, { trackType: 0, timePoint: 57.91069999999925, }, { trackType: 0, timePoint: 57.96329999999702, }, { trackType: 1, timePoint: 58.398199999999264, }, { trackType: 1, timePoint: 58.46289999999851, }, { trackType: 1, timePoint: 58.9965, }, { trackType: 2, timePoint: 59.469099999997766, }, { trackType: 1, timePoint: 59.93950000000001, }, { trackType: 1, timePoint: 59.99619999999926, }, { trackType: 2, timePoint: 60.41519999999926, }, { trackType: 2, timePoint: 60.47979999999703, }, { trackType: 1, timePoint: 60.94859999999777, }, { trackType: 1, timePoint: 61.01319999999926, }, { trackType: 0, timePoint: 61.47789999999851, }, { trackType: 1, timePoint: 61.94029999999702, }, { trackType: 1, timePoint: 61.97919999999925, }, { trackType: 0, timePoint: 62.445399999998514, }, { trackType: 0, timePoint: 62.49669999999925, }, { trackType: 1, timePoint: 62.9285, }, { trackType: 1, timePoint: 62.97989999999851, }, { trackType: 2, timePoint: 63.42989999999851, }, { trackType: 2, timePoint: 63.48009999999776, }, { trackType: 1, timePoint: 63.90079999999702, }, { trackType: 1, timePoint: 63.963499999999996, }, { trackType: 2, timePoint: 64.62059999999776, }, { trackType: 2, timePoint: 64.68009999999776, }, { trackType: 1, timePoint: 64.99509999999776, }, { trackType: 1, timePoint: 65.04579999999703, }, { trackType: 2, timePoint: 65.45259999999777, }, { trackType: 2, timePoint: 65.51350000000001, }, { trackType: 1, timePoint: 65.92879999999703, }, { trackType: 0, timePoint: 66.4045, }, { trackType: 0, timePoint: 66.46219999999926, }, { trackType: 1, timePoint: 66.94429999999703, }, { trackType: 1, timePoint: 66.9965, }, { trackType: 2, timePoint: 67.43589999999851, }, { trackType: 2, timePoint: 67.49639999999852, }, { trackType: 2, timePoint: 67.89929999999703, }, { trackType: 2, timePoint: 67.96269999999926, }, { trackType: 2, timePoint: 68.40459999999777, }, { trackType: 2, timePoint: 68.46319999999926, }, { trackType: 1, timePoint: 68.88459999999776, }, { trackType: 1, timePoint: 68.94629999999702, }, { trackType: 0, timePoint: 69.4055, }, { trackType: 0, timePoint: 69.46309999999777, }, { trackType: 1, timePoint: 69.92739999999851, }, { trackType: 1, timePoint: 69.97969999999926, }, { trackType: 2, timePoint: 70.38919999999926, }, { trackType: 2, timePoint: 70.44659999999777, }, { trackType: 1, timePoint: 70.897, }, { trackType: 1, timePoint: 70.94629999999702, }, { trackType: 1, timePoint: 71.41469999999926, }, { trackType: 1, timePoint: 71.47889999999852, }, { trackType: 1, timePoint: 71.87769999999925, }, { trackType: 1, timePoint: 71.93019999999926, }, { trackType: 1, timePoint: 71.99659999999777, }, { trackType: 1, timePoint: 72.40559999999776, }, { trackType: 1, timePoint: 72.46319999999926, }, { trackType: 1, timePoint: 72.87679999999702, }, { trackType: 1, timePoint: 72.92939999999851, }, { trackType: 0, timePoint: 73.39769999999926, }, { trackType: 0, timePoint: 73.4625, }, { trackType: 0, timePoint: 73.8835, }, { trackType: 0, timePoint: 73.94659999999777, }, { trackType: 1, timePoint: 74.3925, }, { trackType: 1, timePoint: 74.4465, }, { trackType: 2, timePoint: 74.84669999999926, }, { trackType: 2, timePoint: 74.89669999999926, }, { trackType: 1, timePoint: 75.39209999999777, }, { trackType: 2, timePoint: 75.87789999999852, }, { trackType: 2, timePoint: 75.92989999999851, }, { trackType: 1, timePoint: 76.33359999999777, }, { trackType: 1, timePoint: 76.3965, }, { trackType: 0, timePoint: 76.86929999999703, }, { trackType: 0, timePoint: 76.92939999999851, }, { trackType: 1, timePoint: 77.39889999999852, }, { trackType: 1, timePoint: 77.46309999999777, }, { trackType: 2, timePoint: 77.91250000000001, }, { trackType: 2, timePoint: 77.96329999999702, }, { trackType: 1, timePoint: 78.42019999999926, }, { trackType: 1, timePoint: 78.47969999999926, }, { trackType: 0, timePoint: 78.928, }, { trackType: 0, timePoint: 78.97979999999703, }, { trackType: 1, timePoint: 79.393, }, { trackType: 1, timePoint: 79.44839999999851, }, { trackType: 2, timePoint: 79.87979999999702, }, { trackType: 2, timePoint: 79.92989999999851, }, { trackType: 1, timePoint: 80.33159999999776, }, { trackType: 1, timePoint: 80.39629999999703, }, { trackType: 2, timePoint: 80.87819999999925, }, { trackType: 2, timePoint: 80.92989999999851, }, { trackType: 1, timePoint: 81.54979999999702, }, { trackType: 2, timePoint: 81.97800000000001, }, { trackType: 2, timePoint: 82.02969999999925, }, { trackType: 1, timePoint: 82.94879999999702, }, { trackType: 1, timePoint: 83.0125, }, { trackType: 2, timePoint: 83.39859999999777, }, { trackType: 2, timePoint: 83.46269999999926, }, { trackType: 1, timePoint: 83.89539999999852, }, { trackType: 1, timePoint: 83.94550000000001, }, { trackType: 0, timePoint: 84.42029999999703, }, { trackType: 0, timePoint: 84.47929999999702, }, { trackType: 1, timePoint: 84.85209999999776, }, { trackType: 1, timePoint: 84.91329999999702, }, { trackType: 2, timePoint: 85.37950000000001, }, { trackType: 2, timePoint: 85.4288999999985, }, { trackType: 1, timePoint: 85.87789999999852, }, { trackType: 1, timePoint: 85.92929999999703, }, { trackType: 1, timePoint: 86.36569999999926, }, { trackType: 1, timePoint: 86.42989999999851, }, { trackType: 2, timePoint: 86.876, }, { trackType: 2, timePoint: 86.92989999999851, }, { trackType: 1, timePoint: 87.36159999999776, }, { trackType: 1, timePoint: 87.41289999999852, }, { trackType: 0, timePoint: 88.28479999999702, }, { trackType: 0, timePoint: 88.3465, }, { trackType: 0, timePoint: 88.413, }, { trackType: 0, timePoint: 88.47909999999777, }, { trackType: 0, timePoint: 88.54629999999702, }, { trackType: 0, timePoint: 88.61309999999777, }, ]; onLoad() { // 监听清除所有音符事件 EventDispatcher.getTarget().on( EventDispatcher.CLEAR_ALL_NOTE, this.clearAllNote, this, ); // 监听过关事件 EventDispatcher.getTarget().on( EventDispatcher.PASS_LEVLE, this.reGenerateNotes, this, ); // 获取基准线的坐标 this.linePosition = this.lineNode.getPosition(); } start() { this.createNotes(); this.updateNoteCount(); } // 创建音符 private createNotes() { for (let i = 0; i < this.noteArray.length; i++) { const note = instantiate(this.notePrefab); let noteX = 0; if (this.noteArray[i].trackType == 0) { noteX = -180; } else if (this.noteArray[i].trackType == 1) { noteX = 0; } else if (this.noteArray[i].trackType == 2) { noteX = 180; } const noteY = GlobalData.noteSpeed * this.noteArray[i].timePoint + this.linePosition.y; note.setPosition(noteX, noteY); this.node.addChild(note); } } // 清除所有音符 private clearAllNote() { // 清除所有音符节点 this.node.removeAllChildren(); } // 重新生成音符 private reGenerateNotes() { this.clearAllNote(); this.createNotes(); this.updateNoteCount(); } // 更新音符总数的显示 updateNoteCount() { this.noteCountLabel.string = "音符数量:" + this.noteArray.length; } update(deltaTime: number) {} }