import { _decorator, Collider2D, Component, Contact2DType, Node } from "cc"; import { GlobalData } from "../config/GlobalData"; import { GameState } from "../config/Config"; import { NoteControl } from "./NoteControl"; import { EventDispatcher } from "../libs/EventDispatcher"; const { ccclass, property } = _decorator; @ccclass("LineControl") export class LineControl extends Component { start() { // 监听碰撞事件 this.node .getComponent(Collider2D) .on(Contact2DType.BEGIN_CONTACT, this.onCollisionEnter, this); } onCollisionEnter(selfCollider: Collider2D, otherCollider: Collider2D) { // 如果游戏状态不是进行中,直接返回 if (GlobalData.gameState != GameState.PLAYING) { return; } if (otherCollider.tag == 2) { // 1. 剩余生命值减 1 GlobalData.lifeNumPerRound--; // 2. 剩余生命值是否大于等于0 if (GlobalData.lifeNumPerRound >= 0) { // 触发音符碰到线事件 EventDispatcher.getTarget().emit(EventDispatcher.UPDATE_LIFE); } // 3. 如果小于0,游戏结束 if (GlobalData.lifeNumPerRound < 0) { GlobalData.gameState = GameState.GAME_OVER; // 调用 NoteControl 中的 pause 方法暂停音符 otherCollider.getComponent(NoteControl).noteHitLine(); // 发送游戏结束事件 EventDispatcher.getTarget().emit(EventDispatcher.GAME_OVER); } else { GlobalData.gameState = GameState.PAUSED; otherCollider.getComponent(NoteControl).noteHitLine(); // 发送暂停事件 EventDispatcher.getTarget().emit(EventDispatcher.GAME_PAUSE); } // 4. 如果剩余生命值大于等于0,继续游戏(弹出暂停界面) // 线碰到了音符 } } update(deltaTime: number) {} }