ソースを参照

同一敌军的同一批子弹,攻击玩家有cd

zhoupeng 1 年間 前
コミット
8d1a11fd1a

+ 2 - 5
airPlay/assets/Scene/aniScene.fire

@@ -769,7 +769,7 @@
     "_defaultClip": null,
     "_clips": [
       {
-        "__uuid__": "5d925bda-96f8-49cb-bfa1-9ed45ed05b48"
+        "__uuid__": "5141118f-c3d9-46fc-b84d-35fd109ec7ac"
       }
     ],
     "playOnLoad": false,
@@ -916,10 +916,7 @@
     },
     "aniClip": [
       {
-        "__uuid__": "5d925bda-96f8-49cb-bfa1-9ed45ed05b48"
-      },
-      {
-        "__uuid__": "f1779a26-4e56-4cb6-a9eb-103632359b8c"
+        "__uuid__": "5141118f-c3d9-46fc-b84d-35fd109ec7ac"
       }
     ],
     "_id": "a49EFuIgBANYtzCAMsZ1yW"

+ 1 - 0
airPlay/assets/Scene/test.ts

@@ -82,6 +82,7 @@ export default class test extends cc.Component {
             worldPos: this.node.convertToWorldSpaceAR(cc.v2(0,0)),
             dirction: cc.v2(0,1),
             atk:80,
+            zooid: 1,
         }, bulletItem);
     }
 }

+ 1 - 1
airPlay/assets/Script/game/cfg/bulletItem.ts

@@ -10,7 +10,7 @@ interface IBulletItem {
 }
 
 export class BulletItem {
-    id: number;
+    id: string;
     data: IBulletItem;
 
     constructor(id, data) {

+ 20 - 2
airPlay/assets/Script/game/monster/monsterbullet.ts

@@ -3,6 +3,7 @@ import { LQCollide } from "../../../lq_collide_system/lq_collide";
 import { LQCollideBase } from "../../../lq_collide_system/lq_collide_base";
 import { LQCollideInfoList } from "../../../lq_collide_system/lq_collide_config";
 import { EffectMgr } from "../nest/effectMgr";
+import Player from "../player";
 
 const {ccclass, property, requireComponent} = cc._decorator;
 @ccclass
@@ -18,6 +19,11 @@ export default class monsterbullet extends LQCollide {
 
     atk: number = 1;
 
+    bulletId: string;
+    monsterZooid: number;
+
+    _uid: string; // 同一敌军的同一批子弹,对玩家造成伤害有cd限制
+
     protected onLoad(): void {
         cc.log('[monsterbullet] [onLoad]');
     }
@@ -25,8 +31,13 @@ export default class monsterbullet extends LQCollide {
     public on_enter(collide: LQCollide): void {
         cc.log('[monsterbullet] [on_enter]');
         if(collide.collide_group_index == LQCollideInfoList.role) {
-            let worldPos = this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
-            EffectMgr.inst.createHarmNum(worldPos, this.atk);
+            let player = collide.node.getComponent(Player);
+            if(player.canAtk(this.getUid())){
+                player.beAtked(this.getUid());
+
+                let worldPos = this.node.convertToWorldSpaceAR(cc.Vec2.ZERO);
+                EffectMgr.inst.createHarmNum(worldPos, this.atk);
+            }
         }
         this.node.destroy();
     }
@@ -37,4 +48,11 @@ export default class monsterbullet extends LQCollide {
         let angle = cc.v2(0,1).signAngle(dir) / Math.PI * 180;
         this.node.angle = angle;
     }
+
+    getUid(){
+        if(!this._uid){
+            this._uid = this.bulletId + '-' + this.monsterZooid.toString();
+        }
+        return this._uid
+    }
 }

+ 13 - 3
airPlay/assets/Script/game/nest/barrage.ts

@@ -29,6 +29,7 @@ interface IMonsterBullet{
     worldPos: cc.Vec2;
     dirction: cc.Vec2;
     atk: number;
+    zooid?: number;
 }
 
 export class Barrage extends GameSysLogic{
@@ -73,6 +74,7 @@ export class Barrage extends GameSysLogic{
             worldPos,
             dirction,
             atk: model.atk,
+            zooid: monsterZooid,
         };
 
         this.createMonsterBullet(data, bulletItem);
@@ -104,6 +106,8 @@ export class Barrage extends GameSysLogic{
         let dirction = data.dirction;
         let bulletCpt = bulletNode.getComponent(monsterbullet);
         bulletCpt.atk = Utils.intDefault(bulletData.data.effect1) / 100 * data.atk;
+        bulletCpt.monsterZooid = data.zooid;
+        bulletCpt.bulletId = bulletData.id;
 
         bulletNode.zIndex = EBulletZ.monster;
         let moveCpt = Utils.getCpt(Move, bulletNode);
@@ -151,6 +155,8 @@ export class Barrage extends GameSysLogic{
 
             let bulletCpt = bulletNode.getComponent(monsterbullet);
             bulletCpt.atk = Utils.intDefault(bulletData.data.effect1)/ 100 * data.atk;
+            bulletCpt.monsterZooid = data.zooid;
+            bulletCpt.bulletId = bulletData.id;
 
             bulletNode.zIndex = EBulletZ.monster;
             let moveCpt = Utils.getCpt(Move, bulletNode);
@@ -208,6 +214,8 @@ export class Barrage extends GameSysLogic{
 
         let bulletCpt = bulletNode.getComponent(monsterbullet);
         bulletCpt.atk = Utils.intDefault(bulletData.data.effect1)/ 100 * data.atk;
+        bulletCpt.monsterZooid = data.zooid;
+        bulletCpt.bulletId = bulletData.id;
         
         let paramJson = Utils.strToJson(bulletData.data.param);
         let speed = Utils.intDefault(bulletData.data.speed, 500);
@@ -225,6 +233,7 @@ export class Barrage extends GameSysLogic{
                 worldPos: subWorldPos,
                 dirction,
                 atk: data.atk,
+                zooid: data.zooid,
             }, subBulletItem);
 
             bulletNode.destroy();
@@ -319,6 +328,9 @@ export class Barrage extends GameSysLogic{
             let bulletCpt = bulletNode.getComponent(monsterbullet);
 
             bulletCpt.atk = Utils.intDefault(bulletData.data.effect1)/ 100 * data.atk;
+            bulletCpt.monsterZooid = data.zooid;
+            bulletCpt.bulletId = bulletData.id;
+
             bulletNode.zIndex = EBulletZ.monster;
 
             let dirction = leftVec2.rotate(Utils.radian(-angle / (num) * index));
@@ -379,9 +391,7 @@ export class Barrage extends GameSysLogic{
 
 
             bulletNode.addComponent(ResRelease).call = function(){
-                setTimeout(() => {
-                    isOver();
-                }, 100);
+                isOver();
             }
         }
     }

+ 79 - 0
airPlay/assets/Script/game/nest/nestPlay.ts

@@ -102,6 +102,7 @@ export class NestPlay extends cc.Component {
     }
 
     createMonster(){
+        // this.createMonster3();
         this.createMonster2();
     }
 
@@ -149,6 +150,84 @@ export class NestPlay extends cc.Component {
         });
     }
 
+    createMonster3(){
+        this.monsterCnt = 0;
+        for (let index = 0; index < this.num; index++) { 
+            let tId = setTimeout(() => {
+                this.monsterCnt++;
+
+                cc.log('[nestPlay] [create]',`[num:${this.monsterCnt} / ${this.num}]`);
+                let monsterNode = ResMgr.inst.createNode(this.monster, this.monsterNode);
+
+                this.setPattern(monsterNode);
+
+                let models = monsterNode.getComponentsInChildren(MonsterModel);
+                models.forEach(v=>{
+                    let modleNode = v.node;
+                    let aniTop = new cc.Node('AniTop');
+                    let parent = modleNode.parent;
+
+                    modleNode.removeFromParent(false);
+                    parent.addChild(aniTop);
+                    aniTop.addChild(modleNode);
+
+                    aniTop.setPosition(modleNode.getPosition());
+                    modleNode.setPosition(cc.Vec2.ZERO);
+
+                });
+
+                let cnt = 0;
+                let callAni = ()=>{
+
+                    if(!cc.isValid(monsterNode, true)){
+                        return;
+                    }
+
+                    let models = monsterNode.getComponentsInChildren(MonsterModel);
+
+                    models.forEach(v=>{
+                        let modleNode = v.node;
+
+                        let aniNode = new cc.Node('AniItem');
+                        let parent = modleNode.parent;
+                        modleNode.removeFromParent(false);
+                        aniNode.addChild(modleNode);
+
+                        parent.addChild(aniNode);
+                        // aniNode.setPosition(modleNode.getPosition())
+                        // modleNode.setPosition(cc.v2(0,0));
+    
+                        let ani = aniNode.addComponent(cc.Animation);
+                        ani.addClip(this.aniClip[cnt], 'path')
+                        ani.play('path').speed = 0.3;
+                        
+                        ani.once(cc.Animation.EventType.FINISHED, ()=>{
+                            cnt++;
+                            if(cnt < this.aniClip.length){
+                                aniNode.angle = 0;
+                                callAni();
+                            }
+                            else{
+                                let nodeBox = aniNode.getBoundingBoxToWorld();
+                                let viewsize = cc.view.getVisibleSize();
+                                let viewBox = cc.rect(0,0,viewsize.width,viewsize.height);
+                                // cc.log('@@', nodeBox.toString(), viewBox.toString());
+                                if(!viewBox.containsRect(nodeBox)) {
+                                    aniNode.destroy();
+                                }
+                            }
+                        });
+                    });
+
+                }
+                callAni();
+
+
+            }, 1000 * this.time * index);
+            this.timeArr.push(tId);
+        }
+    }
+
     createMonster2(){
         this.monsterCnt = 0;
         for (let index = 0; index < this.num; index++) {

+ 2 - 2
airPlay/assets/Script/game/panel/debug.ts

@@ -1,6 +1,6 @@
 import { LevelMgr } from "../../levelMgr";
 import { Barrage } from "../nest/barrage";
-import player from "../player";
+import Player from "../player";
 import { GameLogicMgr } from "../update/logic";
 
 const {ccclass, property} = cc._decorator;
@@ -54,7 +54,7 @@ export default class debug extends cc.Component {
         LevelMgr.inst.skip(Number(str));
     }
 	onAttckTouchEnd(){
-        player.PlayerAttack = !player.PlayerAttack;
+        Player.PlayerAttack = !Player.PlayerAttack;
     }
 	onLeftTouchEnd(){
         Barrage.skillNum--;

+ 18 - 4
airPlay/assets/Script/game/player.ts

@@ -11,7 +11,7 @@ const {ccclass, property} = cc._decorator;
 export let PlayerAttack = true;
 
 @ccclass
-export default class player extends GameLogic {
+export default class Player extends GameLogic {
 
     /*===========================自动绑定组件开始===========================*/
     /*自动生成*/
@@ -26,11 +26,11 @@ export default class player extends GameLogic {
     moveCpt: MoveDest = null;
     bulletCD:number = 0.2;
     bulletCDTime: number = 0;
-
     airStartPos: cc.Vec2;
-
     static PlayerAttack = true;
 
+    atkRecord: Map<string, number> = new Map();
+
     protected onLoad(): void {
         this.moveCpt = this.node.getComponent(MoveDest);
         if(!this.moveCpt) {
@@ -59,7 +59,7 @@ export default class player extends GameLogic {
         this.bulletCDTime -= dt;
         if(this.bulletCDTime <= 0){
             this.bulletCDTime = this.bulletCD;
-            player.PlayerAttack && Barrage.inst.createPlayerBullet(this.node.convertToWorldSpaceAR(cc.Vec2.ZERO));
+            Player.PlayerAttack && Barrage.inst.createPlayerBullet(this.node.convertToWorldSpaceAR(cc.Vec2.ZERO));
         }
     }
 
@@ -76,4 +76,18 @@ export default class player extends GameLogic {
     onTouchEnd(){
         this.moveCpt.enabled = false;
     }
+
+    canAtk(key: string){
+        if(!this.atkRecord.has(key)) return true;
+        if(Date.now() - this.atkRecord.get(key) >= 500){
+            cc.log('@@ key', key, ' | ',this.atkRecord.get(key));
+            return true;
+        }
+        return false;
+    }
+
+    beAtked(key: string){
+        this.atkRecord.set(key, Date.now())
+        cc.log('@@ addkey', key, ' | ',this.atkRecord.get(key));
+    }
 }

+ 4 - 4
airPlay/assets/resources/monster/pattern201.prefab

@@ -91,8 +91,8 @@
       "__type__": "TypedArray",
       "ctor": "Float64Array",
       "array": [
-        0,
-        0,
+        -33,
+        -33,
         0,
         0,
         0,
@@ -137,8 +137,8 @@
       "__type__": "TypedArray",
       "ctor": "Float64Array",
       "array": [
-        58,
-        65,
+        33,
+        33,
         0,
         0,
         0,

+ 4 - 4
airPlay/assets/resources/monster/pattern202.prefab

@@ -91,8 +91,8 @@
       "__type__": "TypedArray",
       "ctor": "Float64Array",
       "array": [
-        0,
-        0,
+        33,
+        -33,
         0,
         0,
         0,
@@ -137,8 +137,8 @@
       "__type__": "TypedArray",
       "ctor": "Float64Array",
       "array": [
-        -58,
-        65,
+        -33,
+        33,
         0,
         0,
         0,

+ 1 - 1
airPlay/packages/CocosInspector/cocos-inspector-config.json

@@ -1 +1 @@
-{"logCount":3,"retinaEnable":true,"autoUpdateTree":true,"sliderWithInput":false,"disableWebSec":false,"displayAsFairyTree":false,"hideFairyComContainer":false,"syncNodeDetail":true,"showZ":true,"showDevToolInTab":true,"size":[768,1024],"extraSizes":[],"isPortrait":true,"show":false,"urlParams":"","customUrl":"","clearLogAfterRefresh":true,"extensionFile":"","enableExtension":true,"showDc":false,"showZIndex":false,"sortCompProperties":{"<Widget>":true,"<UIUpdater>":false,"<Canvas>":false,"<Start>":false,"<Camera>":false,"<RigidBody>":false,"<PhysicsBoxCollider>":false,"<Label>":true},"simpleMode":false,"orderNum":"STORE06cea072e06c6","glass":false,"showChildrenCount":false,"openArrayLimit":5,"prefabFontSize":1.15,"useChinese":true,"spaceToPause":false,"theme":"dark","httpProxyServer":"","proxyBypassRules":"","openHttpProxy":false,"propertyAlignLeft":false}
+{"logCount":3,"retinaEnable":true,"autoUpdateTree":true,"sliderWithInput":false,"disableWebSec":false,"displayAsFairyTree":false,"hideFairyComContainer":false,"syncNodeDetail":true,"showZ":true,"showDevToolInTab":true,"size":[1000,1200],"extraSizes":[{"name":"editor","s":[1000,1200]}],"isPortrait":true,"show":false,"urlParams":"","customUrl":"","clearLogAfterRefresh":true,"extensionFile":"","enableExtension":true,"showDc":false,"showZIndex":false,"sortCompProperties":{"<Widget>":true,"<UIUpdater>":false,"<Canvas>":false,"<Start>":false,"<Camera>":false,"<RigidBody>":false,"<PhysicsBoxCollider>":false,"<Label>":true},"simpleMode":false,"orderNum":"STORE06cea072e06c6","glass":false,"showChildrenCount":false,"openArrayLimit":5,"prefabFontSize":1.15,"useChinese":true,"spaceToPause":false,"theme":"dark","httpProxyServer":"","proxyBypassRules":"","openHttpProxy":false,"propertyAlignLeft":false}