From ee7f1c322baa353d7f4e08c5a2101b4e5e4b25f1 Mon Sep 17 00:00:00 2001 From: "pan@work" Date: Wed, 21 Aug 2024 17:55:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=80=E8=83=BD=E8=BF=98=E6=9C=89=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/resources/game/skills/fire.prefab | 5 +- assets/script/game/common/config/CardSet.ts | 2 +- assets/script/game/monster/CSkill.ts | 4 +- assets/script/game/monster/CSkillComp.ts | 22 ++++- assets/script/game/skills/Skill.ts | 3 +- assets/script/game/skills/SkillCom.ts | 91 +++++++++++---------- settings/v2/packages/project.json | 6 +- 7 files changed, 78 insertions(+), 55 deletions(-) diff --git a/assets/resources/game/skills/fire.prefab b/assets/resources/game/skills/fire.prefab index b6bc0cb6..5129f589 100644 --- a/assets/resources/game/skills/fire.prefab +++ b/assets/resources/game/skills/fire.prefab @@ -287,7 +287,7 @@ "_restitution": 0, "_offset": { "__type__": "cc.Vec2", - "x": 15.2, + "x": 1.2, "y": 0.3 }, "_size": { @@ -328,7 +328,6 @@ "__id__": 0 }, "fileId": "c46/YsCPVOJYA4mWEpNYRx", - "instance": null, - "targetOverrides": null + "instance": null } ] \ No newline at end of file diff --git a/assets/script/game/common/config/CardSet.ts b/assets/script/game/common/config/CardSet.ts index e38367b0..90620cc2 100644 --- a/assets/script/game/common/config/CardSet.ts +++ b/assets/script/game/common/config/CardSet.ts @@ -47,7 +47,7 @@ export const HeroSet ={ } export const SkillSet={ - 1001:{uuid: 1001,path: "1001",type: 1,level: 1,name: "火球术-初级",sp_name:"fire",dis:720,count:1,atk: 4,sd:10,cd:1,speed:400,}, + 1001:{uuid: 1001,path: "1001",type: 1,level: 1,name: "火球术-初级",sp_name:"fire",dis:1720,count:1,atk: 4,sd:10,cd:1,speed:400,}, 1002:{uuid: 1002,path: "1002",type: 1,level: 1,name: "寒冰箭-初级",sp_name:"fire",dis:720,count:1,atk: 4,sd:10,cd:1,speed:400,}, 1003:{uuid: 1003,path: "1003",type: 1,level: 1,name: "狂暴-初级",sp_name:"fire",dis:720,count:1,atk: 4,sd:10,cd:1,speed:400,}, 1004:{uuid: 1004,path: "1004",type: 1,level: 1,name: "守护-初级",sp_name:"fire",dis:720,count:1,atk: 4,sd:10,cd:1,speed:400,}, diff --git a/assets/script/game/monster/CSkill.ts b/assets/script/game/monster/CSkill.ts index 63ce3024..3340db45 100644 --- a/assets/script/game/monster/CSkill.ts +++ b/assets/script/game/monster/CSkill.ts @@ -34,7 +34,7 @@ export class CSkill extends ecs.Entity { var scene = smc.map.MapView.scene; node.parent = scene.entityLayer!.node!; node.getChildByName("skill").setScale(node.getChildByName("skill").scale.x*scale, node.getChildByName("skill").scale.y, node.getChildByName("skill").scale.z); - let cskills = ecs.query(ecs.allOf(CSkillComp)) + // let cskills = ecs.query(ecs.allOf(CSkillComp)) for (let index = 1; index <= 8; index++) { if(smc.player_buffs[index].eid == 0){ pos.x=smc.player_buffs[index].x @@ -44,7 +44,7 @@ export class CSkill extends ecs.Entity { } } - console.log("load skill",pos,smc.player_buffs) + // console.log("load skill",pos,smc.player_buffs) node.setPosition(pos.x*scale,pos.y,pos.z) // console.log(node.getChildByName("avatar").getChildByName("TNode").getChildByName("bb").getComponent(Sprite)) const url = 'game/heros/skill'; diff --git a/assets/script/game/monster/CSkillComp.ts b/assets/script/game/monster/CSkillComp.ts index 1355d922..cef6c8fb 100644 --- a/assets/script/game/monster/CSkillComp.ts +++ b/assets/script/game/monster/CSkillComp.ts @@ -7,6 +7,7 @@ import { SkillSet } from "../common/config/CardSet"; import { Monster } from "./Monster"; import { MonsterModelComp } from "./MonsterModelComp"; import { MonsterViewComp } from "./MonsterViewComp"; +import { BoxSet } from "../common/config/BoxSet"; const { ccclass, property } = _decorator; /** 视图层对象 */ @@ -44,17 +45,30 @@ export class CSkillComp extends CCComp { shoot() { let skill = ecs.getEntity(Skill); let pos = v3(0,0) - let t_pos:Vec3=null + let t_pos = v3(0,0) + let angle = 0 + let m_pos=v3(0,0) let monsters:any = ecs.query(ecs.allOf(MonsterModelComp)); - for (const monster of monsters) { - t_pos= monster.getComponent(MonsterViewComp).get_monster_pos() + if (monsters.length > 0) { + m_pos = monsters[0].MonsterView.get_monster_pos() + + }else{ + m_pos = v3(BoxSet.MONSTER_START,BoxSet.GAME_LINE) } + t_pos = v3(m_pos.x-this.node.position.x,m_pos.y-this.node.position.y) + // console.log("m_pos",this.node.position,m_pos); + let dx=m_pos.x-this.node.position.x + let dy=m_pos.y-this.node.position.y + let dir=v3(dx,dy,0) + let randian=Math.atan2(dir.y,dir.x) + angle = randian * (180 / Math.PI); + // console.log("angle",angle); let scale = this.scale let dis = SkillSet[this.skill_uuid].dis+this.dis; let atk = SkillSet[this.skill_uuid].atk+this.atk; let speed = SkillSet[this.skill_uuid].speed+this.speed; let sp_name = SkillSet[this.skill_uuid].sp_name - skill.load(pos,speed,dis,scale,this.node,sp_name,atk,t_pos); + skill.load(pos,speed,dis,scale,this.node,sp_name,atk,angle,t_pos); } /** 全局消息逻辑处理 */ // private onHandler(event: string, args: any) { diff --git a/assets/script/game/skills/Skill.ts b/assets/script/game/skills/Skill.ts index d56e8691..18c1a294 100644 --- a/assets/script/game/skills/Skill.ts +++ b/assets/script/game/skills/Skill.ts @@ -28,7 +28,7 @@ export class Skill extends ecs.Entity { this.remove(SkillCom); super.destroy(); } - load(pos: Vec3 = Vec3.ZERO,speed:number = 100,dis:number = 50,scale:number = 1,parent:Node,skill_name:string = "base",atk:number =10,t_pos:Vec3 = null) { + load(pos: Vec3 = Vec3.ZERO,speed:number = 100,dis:number = 50,scale:number = 1,parent:Node,skill_name:string = "base",atk:number =10,angle = 0,t_pos:Vec3 = null) { var path = "game/skills/"+skill_name; var prefab: Prefab = oops.res.get(path, Prefab)!; var node = instantiate(prefab); @@ -42,6 +42,7 @@ export class Skill extends ecs.Entity { sv.dis = dis; sv.scale = scale; sv.atk = atk; + sv.angle = angle; sv.t_pos = t_pos; if(scale == 1){ sv.change_collider_group(BoxSet.HERO_SKILL) diff --git a/assets/script/game/skills/SkillCom.ts b/assets/script/game/skills/SkillCom.ts index 14f57d27..b3e4ec95 100644 --- a/assets/script/game/skills/SkillCom.ts +++ b/assets/script/game/skills/SkillCom.ts @@ -16,29 +16,46 @@ export class SkillCom extends CCComp { // // this.on(ModuleEvent.Cmd, this.onHandler, this); // } speed:number = 200; + y_speed:number = 0; + x_speed:number = 0; dis:number = 80; scale:number = 1; atk:number = 10; + angle:number = 0; t_pos:Vec3 = null; is_destroy:boolean = false; start() { this.node.active=true + this.node.angle = this.angle; + //根据目标坐标、欧拉角、预设距离增量speed 来计算新的x增量,y增量 + // this.x_speed = Math.cos(this.angle * Math.PI / 180) * this.speed; + // this.y_speed = Math.sin(this.angle * Math.PI / 180) * this.speed; + + let collider = this.getComponent(Collider2D); if (collider) { // collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this); collider.on(Contact2DType.POST_SOLVE, this.onPostSolve, this); } if(this.t_pos){ - tween(this.node).to( 0.5,{ position: new Vec3(0, 10, 0) } ).start(); - }else{ - tween(this.node).to( this.dis/this.speed, - { position: new Vec3(this.node.position.x+this.scale*this.dis,this.node.position.y) }, + //通过欧拉角 延长 目标点位置 + this.t_pos.x=Math.cos(this.angle * Math.PI / 180) * this.dis; + this.t_pos.y=Math.sin(this.angle * Math.PI / 180) * this.dis; + tween(this.node).to( 1,{ angle:this.angle,position: this.t_pos}, { - onComplete: (target?: object) => { - this.toDestroy() - }, - } - ).start(); + onComplete: (target?: object) => { + // this.check_to_destroy() + }, + } ).start(); + }else{ + tween(this.node).to( this.dis/this.speed, + { position: new Vec3(this.node.position.x+this.scale*this.dis,this.node.position.y) }, + { + onComplete: (target?: object) => { + this.check_to_destroy() + }, + } + ).start(); } } @@ -48,29 +65,18 @@ export class SkillCom extends CCComp { case BoxSet.HERO_SKILL: switch (otherCollider.group){ case BoxSet.MONSTER: - if(this.is_destroy){ - return - }else{ - this.is_destroy = true; - this.toDestroy(); - } - - - // this.speed = 0; - // this.timer = 1; - // console.log("speed:"+this.speed+" | timer:"+this.timer); - break; + case BoxSet.DEFAULT: + this.check_to_destroy() + break } break; case BoxSet.MONSTER_SKILL: switch (otherCollider.group){ case BoxSet.PLAYER: case BoxSet.HERO: - if(!this.is_destroy){ - this.is_destroy = true; - this.toDestroy(); - } - break + case BoxSet.DEFAULT: + this.check_to_destroy() + break } } @@ -83,23 +89,26 @@ export class SkillCom extends CCComp { update(deltaTime: number) { // this.node.setScale(v3(this.scale,this.node.scale.y,this.node.scale.z)) this.move(deltaTime) - if(Math.abs(this.node.position.x) > this.dis) - { - if(this.is_destroy){ - return - }else{ - this.is_destroy = true; - this.toDestroy() - } + // if(Math.abs(this.node.position.x) > this.dis) + // { + // this.check_to_destroy() - } + // } } move(dt: number) { - // this.node.setPosition(v3(this.node.position.x+dt*this.speed*this.scale,this.node.position.y,this.node.position.z)) + // this.node.setPosition(v3(this.node.position.x+dt*this.x_speed*this.scale,this.node.position.y+this.y_speed,this.node.position.z)) } - + check_to_destroy(){ + if(!this.is_destroy){ + this.is_destroy = true; + setTimeout(() => { + this.toDestroy(); + }, 10); + + } + } /** 全局消息逻辑处理 */ // private onHandler(event: string, args: any) { // switch (event) { @@ -109,16 +118,16 @@ export class SkillCom extends CCComp { // } toDestroy() { // this.node.active = false; - var scene = smc.map.MapView.scene; - this.node.parent = scene.entityLayer!.node!; + // var scene = smc.map.MapView.scene; + // this.node.parent = scene.entityLayer!.node!; // console.log("toDestroy"); - if (this.node.isValid) { + // console.log("this.node.isValid"); setTimeout(() => { // console.log("SkillCom.node.destroy",this); this.ent.destroy() }, 10); - } + } /** 视图对象通过 ecs.Entity.remove(ModuleViewComp) 删除组件是触发组件处理自定义释放逻辑 */ diff --git a/settings/v2/packages/project.json b/settings/v2/packages/project.json index 7bd9d030..e7e284a5 100644 --- a/settings/v2/packages/project.json +++ b/settings/v2/packages/project.json @@ -51,11 +51,11 @@ } ], "collisionMatrix": { - "0": 103, + "0": 127, "1": 55, "2": 79, - "3": 36, - "4": 66, + "3": 37, + "4": 67, "5": 11, "6": 21 }