first commit
This commit is contained in:
52
assets/seripts/components/LineControl.ts
Normal file
52
assets/seripts/components/LineControl.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
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) {}
|
||||
}
|
||||
Reference in New Issue
Block a user