| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | 
							- import { _decorator, Animation, AnimationClip, BoxCollider2D, Collider2D, Component, Contact2DType, ICollisionEvent, IPhysics2DContact, Node, PhysicsGroup, PhysicsSystem2D, SpriteFrame, UITransform, Vec2, Vec3 } from 'cc';
 
- import { Tools } from '../../Tools/Tools';
 
- import { LifeBar } from './LifeBar';
 
- import { Role, RoleState } from '../Role';
 
- const { ccclass, property } = _decorator;
 
- /*
 
- @ccclass('Bullet')
 
- export class Bullet extends Component {
 
-     explodeframes: SpriteFrame[] = [];
 
-     bulletFrames: SpriteFrame[] = [];
 
-     explodeAni: Animation = null;
 
-     bulletAni: Animation = null;
 
-     //是否爆炸 true -> 爆炸
 
-     isExplode: boolean = false;
 
-     //子弹速度
 
-     bulletSpeed: number = 100;
 
-     //子弹方向
 
-     direction: number = 1;
 
-     //攻击力
 
-     atk: number = null;
 
-     //被攻击的节点
 
-     targetNode: Node = null;
 
-     //是否碰撞
 
-     private _hasCollided: boolean = false;
 
-     //private _initPos: Vec3 = null;
 
-     protected onLoad(): void {
 
-         const collider = this.getComponent(Collider2D);
 
-         if (collider) {
 
-             //collider.on(Contact2DType.BEGIN_CONTACT, this._onBeginContact, this)
 
-         }
 
-     }
 
-     start() {
 
-         this.explodeAni = Tools.createAnimation(this.explodeframes, 5, this.node, AnimationClip.WrapMode.Normal);
 
-         this.bulletAni = Tools.createAnimation(this.bulletFrames, 5, this.node, AnimationClip.WrapMode.Loop);
 
-         //this.node.setPosition(0, 0, 0);
 
-         //this._initPos = this.node.position;
 
-         this.setState(false);
 
-     }
 
-     setState(isExplode: boolean) {
 
-         if (isExplode) {
 
-             this.bulletSpeed = 0;
 
-             this.explodeAni.play();
 
-             this.explodeAni.once(Animation.EventType.FINISHED, () => {
 
-                 this.node.destroy()
 
-             },
 
-                 this.node)
 
-         } else {
 
-             this.bulletAni.play();
 
-         }
 
-     }
 
-     _onBeginContact(otherCollider: BoxCollider2D) {
 
-         const lifeBar = this.targetNode.getComponent(LifeBar);
 
-         lifeBar.updateProgressBar(lifeBar._curHp - this.atk);
 
-         this.setState(true);
 
-     }
 
-     update(deltaTime: number) {
 
-         this.move(deltaTime);
 
-         this.onBulletCollision(this.targetNode);
 
-         //this._checkDistance();
 
-     }
 
-     // private _checkDistance(){
 
-     //     const currentPos: Vec3 = this.node.position;
 
-     //     const distance = currentPos.subtract(this._initPos).length();
 
-     //     if(distance >= 180){
 
-     //         this.node.destroy;
 
-     //     }
 
-     // }
 
-     move(dt: number) {
 
-         let x = this.node.getWorldPosition().x;
 
-         let y = this.node.getWorldPosition().y;
 
-         let z = this.node.getWorldPosition().z;
 
-         // if (this.direction) {
 
-         //     x = x + this.bulletSpeed * dt;
 
-         // } else {
 
-         //     x = x - this.bulletSpeed * dt;
 
-         // }
 
-         x = x + this.bulletSpeed * this.direction * dt;
 
-         this.node.setWorldPosition(x, y, z)
 
-     }
 
-     // 处理子弹碰撞
 
-     onBulletCollision(targetNode: Node) {
 
-         if(this._hasCollided) return;
 
-         if(!targetNode.isValid) return;
 
-         const boxBullet = this.node.getComponent(UITransform).getBoundingBoxToWorld();
 
-         const boxTarget = targetNode.getComponent(UITransform).getBoundingBoxToWorld();
 
-         if (boxTarget.containsRect(boxBullet)) {
 
-             const targetLifeBar = targetNode.getComponent(LifeBar);
 
-             if((targetLifeBar._curHp - this.atk) <= 0){
 
-                 this.targetNode.destroy();
 
-                 this.node.destroy();
 
-             }
 
-             targetLifeBar.updateProgressBar(targetLifeBar._curHp - this.atk);
 
-             this._hasCollided = true;
 
-             this.setState(true);
 
-         }
 
-     }
 
- }
 
- */
 
- @ccclass('Bullet')
 
- export class Bullet extends Component {
 
-     explodeframes: SpriteFrame[] = [];
 
-     bulletFrames: SpriteFrame[] = [];
 
-     explodeAni: Animation = null;
 
-     bulletAni: Animation = null;
 
-     //是否爆炸 true -> 爆炸
 
-     isExplode: boolean = false;
 
-     //子弹速度
 
-     bulletSpeed: number = 100;
 
-     //子弹方向
 
-     direction: number = 1;
 
-     //攻击力
 
-     atk: number = null;
 
-     //被攻击的节点
 
-     targetNode: Node = null;
 
-     //是否碰撞
 
-     private _hasCollided: boolean = false;
 
-     private _bulletColl: BoxCollider2D = null;
 
-     private _initPos: Vec3 = null;
 
-     protected onLoad(): void {
 
-         this._bulletColl = this.getComponent(BoxCollider2D);
 
-         
 
-     }
 
-     start() {
 
-         //this._bulletColl.on("onCollisionEnter",this._onCollStart,this);
 
-         this.explodeAni = Tools.createAnimation(this.explodeframes, 20, this.node, AnimationClip.WrapMode.Normal);
 
-         this.bulletAni = Tools.createAnimation(this.bulletFrames, 5, this.node, AnimationClip.WrapMode.Loop);
 
-         this._initPos = this.node.position;
 
-         this.setState(false);
 
-     }
 
-     setState(isExplode: boolean) {
 
-         if (isExplode) {
 
-             this.bulletSpeed = 0;
 
-             this.bulletAni.stop();
 
-             this.explodeAni.play();
 
-             this.explodeAni.once(Animation.EventType.FINISHED, () => {
 
-                 this.node.destroy()
 
-             },
 
-                 this)
 
-         } else {
 
-             this.bulletAni.play();
 
-         }
 
-     }
 
-     update(deltaTime: number) {
 
-         this.move(deltaTime);
 
-         this.onBulletCollision(this.targetNode);
 
-         this._checkDistance();
 
-     }
 
-     move(dt: number) {
 
-         let x = this.node.getWorldPosition().x;
 
-         let y = this.node.getWorldPosition().y;
 
-         let z = this.node.getWorldPosition().z;
 
-         
 
-         x = x + this.bulletSpeed * this.direction * dt;
 
-         this.node.setWorldPosition(x, y, z)
 
-     }
 
-     private _onCollStart(event: ICollisionEvent){
 
-         if(event.otherCollider.node.uuid === this.targetNode.uuid){
 
-           
 
-         }
 
-     }
 
-     // 处理子弹碰撞
 
-     private onBulletCollision(targetNode: Node) {
 
-         if (this._hasCollided) return;
 
-         if (!targetNode.isValid) return;
 
-         const boxBullet = this.node.getComponent(UITransform).getBoundingBoxToWorld();
 
-         const boxTarget = targetNode.getComponent(UITransform).getBoundingBoxToWorld();
 
-         if (boxTarget.intersects(boxBullet)) {
 
-             const targetLifeBar = targetNode.getComponent(LifeBar);
 
-             const curHp: number = targetLifeBar._curHp - this.atk;
 
-             targetLifeBar.updateProgressBar(curHp);
 
-             if (curHp <= 0) {
 
-                 //this.targetNode.destroy();
 
-                 this.node.destroy();
 
-             }
 
-             this._hasCollided = true;
 
-             this.setState(true);
 
-         }
 
-     }
 
-     private _checkDistance() {
 
-         const currentPos: Vec3 = this.node.position;
 
-         const distance: number = currentPos.subtract(this._initPos).length();
 
-         if (distance >= 180) {
 
-             this.node.destroy;
 
-         }
 
-     }
 
- }
 
 
  |