123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- // Learn TypeScript:
- // - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
- // Learn Attribute:
- // - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
- // Learn life-cycle callbacks:
- // - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
- import GameManager from "./GameManager";
- const { ccclass, property } = cc._decorator;
- @ccclass
- export default class CharaCollision extends cc.Component {
- CharaNumber: number = 0;//代表自身是那种类型的水果
- returnNumber: boolean = false;
- getNumberTime: number = 0;
- bianjieX: number = 0;// 防止水果位置超出屏幕外
- testEndDJS: number = 0;// 检测死亡倒计时
- endOne: number = 0; //只执行一次结束
- // LIFE-CYCLE CALLBACKS:
- // onLoad () {}
- start() {
- this.bianjieX = 360 - this.node.width / 2;
- }
- update(dt) {
- if (this.node.x < -this.bianjieX) {
- this.node.x = -this.bianjieX
- }
- if (this.node.x > this.bianjieX) {
- this.node.x = this.bianjieX
- }
- if (this.returnNumber) {
- this.scheduleOnce(() => {
- this.getNumberTime = 0
- }, 0.25)
- this.returnNumber = false;
- }
- if (this.node.parent.name == "CharaNode") {
- this.testEndDJS += dt;
- //cc.log(this.testEndDJS)
- }
- if (this.node.y + this.node.width / 2 > cc.find("Canvas/LineNode").children[0].y && this.endOne == 0 && this.testEndDJS > 3) {
- for (let i = 0; i < cc.find("Canvas/CharaNode").children.length; i++) {
- cc.find("Canvas/CharaNode").children[i].removeComponent(cc.PhysicsCircleCollider);
- cc.find("Canvas/CharaNode").children[i].removeComponent(cc.RigidBody);
- }
- this.node.color = cc.Color.RED;
- cc.tween(this.node)
- .to(0.3, { opacity: 0 })
- .to(0.3, { opacity: 255 })
- .union()
- .repeat(3)
- .call(() => {
- GameManager.Instance.end();
- cc.find("Canvas/LineNode").children[0].active = false;
- })
- .start()
- this.endOne++;
- }
- }
- // 防止多次碰撞
- getNumber() {
- let ad = this.getNumberTime;
- this.getNumberTime++;
- this.returnNumber = true;
- return ad;
- }
- onBeginContact(contact, selfCollider, otherCollider) {
- if (otherCollider.node.group == "Chara") {
- //this.endCtrl = true;
- // 只有下方的水果触发碰撞回调
- if (selfCollider.node.y < otherCollider.node.y) {
- return
- }
- // 水果一下落,放在CharaNode节点下
- selfCollider.node.parent = cc.find("Canvas/CharaNode");
- if (selfCollider.node.getComponent(cc.RigidBody) != null) {
- selfCollider.node.getComponent(cc.RigidBody).angularVelocity = 0;
- // 限制一下线速度
- }
- let selfNum = this.CharaNumber;
- let otherNum = otherCollider.node.getComponent("CharaCollision").CharaNumber;
- // 水果类型相同的合成
- if (selfNum == otherNum && selfNum < GameManager.Instance.AllChara.length-1 && otherNum < GameManager.Instance.AllChara.length-1) {
- if (selfCollider.node.getComponent("CharaCollision").getNumber() == 0) {
- otherCollider.node.getComponent(cc.PhysicsCircleCollider).radius = 0;
- otherCollider.node.getComponent(cc.PhysicsCircleCollider).apply()
- this.node.getComponent(cc.PhysicsCircleCollider).radius = 0;
- this.node.getComponent(cc.PhysicsCircleCollider).apply();
- cc.tween(selfCollider.node)
- .to(0.1, { position: otherCollider.node.position })
- .call(() => {
- try {
- //生成下一个等级的水果
- GameManager.Instance.CharaNumberRec[this.CharaNumber]=GameManager.Instance.CharaNumberRec[this.CharaNumber]-2;
- GameManager.Instance.CharaNumberRec[this.CharaNumber + 1]++;
- GameManager.Instance.score += this.CharaNumber + 1;
- GameManager.Instance.createLevelUpChara(this.CharaNumber + 1, otherCollider.node.position);
- otherCollider.node.active = false;
- selfCollider.node.active = false;
- otherCollider.node.destroy();
- selfCollider.node.destroy();
- GameManager.Instance.updateCharaNumber();
- } catch (error) {
-
- }
- })
- .start()
- }
- }
- // else if (selfNum == otherNum && selfNum == GameManager.Instance.AllChara.length && otherNum == GameManager.Instance.AllChara.length) {
- // if (selfCollider.node.getComponent("CharaCollision").getNumber() == 0) {
- // otherCollider.node.getComponent(cc.PhysicsCircleCollider).radius = 0;
- // otherCollider.node.getComponent(cc.PhysicsCircleCollider).apply()
- // this.node.getComponent(cc.PhysicsCircleCollider).radius = 0;
- // this.node.getComponent(cc.PhysicsCircleCollider).apply();
- // cc.tween(selfCollider.node)
- // .to(0.1, { position: otherCollider.node.position })
- // .call(() => {
- // GameManager.Instance.score += this.CharaNumber + 1;
- // GameManager.Instance.createLevelUpChara(this.CharaNumber + 1, otherCollider.node.position);
- // otherCollider.node.active = false;
- // selfCollider.node.active = false;
- // otherCollider.node.destroy();
- // selfCollider.node.destroy();
- // })
- // .start()
- // }
- // }
- }
- }
- }
|