barrage.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import bullet from "../bullet";
  2. import { Utils } from "../common/utils";
  3. import { ResMgr } from "../res/resMgr";
  4. import { ResRelease } from "../res/resRelease";
  5. import { GameSysLogic } from "../update/gameSysLogic";
  6. import Move from "../update/move";
  7. import MoveTime from "../update/moveTime";
  8. /**
  9. * 1 扇形弹幕: 开始角度(相对于向上), 角度,数量
  10. * 2 旋转飞行: 半径
  11. * 3 直线: 开始角度
  12. * 4 直线后炸开: 时间,开始角度,数量
  13. */
  14. export class Barrage extends GameSysLogic{
  15. parent: cc.Node;
  16. static skillNum = 1;
  17. private static _inst: Barrage;
  18. public static get inst(): Barrage {
  19. if (this._inst == null) {
  20. this._inst = new Barrage();
  21. }
  22. return this._inst;
  23. }
  24. // 直线
  25. async createPlayerBullet1(worldPos: cc.Vec2){
  26. let bulletNode = await ResMgr.inst.loadPrefab('monster/bullet', this.parent);
  27. let moveCpt = Utils.getCpt(Move, bulletNode);
  28. moveCpt.dirction = cc.v2(0,1);
  29. moveCpt.speed = 500;
  30. let localPos = this.parent.convertToNodeSpaceAR(worldPos);
  31. bulletNode.setPosition(localPos);
  32. }
  33. async createPlayerBullet(worldPos: cc.Vec2){
  34. switch(Barrage.skillNum){
  35. case 1:
  36. this.createPlayerBullet1(worldPos);
  37. break;
  38. case 2:
  39. this.createPlayerBullet2(worldPos);
  40. break;
  41. case 3:
  42. this.createPlayerBullet3(worldPos);
  43. break;
  44. case 4:
  45. this.createPlayerBullet4(worldPos);
  46. break;
  47. }
  48. }
  49. // 扇形弹幕
  50. async createPlayerBullet2(worldPos: cc.Vec2){
  51. let num = 9;
  52. let angle = 60;
  53. let leftVec2 = cc.v2(0,1).rotateSelf(Utils.radian(angle/2));
  54. let prefab = await ResMgr.inst.getPrefab('monster/bullet');
  55. for (let index = 0; index < num; index++) {
  56. let bulletNode = ResMgr.inst.createNode(prefab, this.parent)
  57. let bulletCpt = bulletNode.getComponent(bullet);
  58. let moveCpt = Utils.getCpt(Move, bulletNode);
  59. moveCpt.dirction = leftVec2.rotate(Utils.radian(-angle / (num-1) * index));
  60. moveCpt.speed = 500;
  61. bulletCpt.setDirction(moveCpt.dirction);
  62. let localPos = this.parent.convertToNodeSpaceAR(worldPos);
  63. bulletNode.setPosition(localPos);
  64. }
  65. }
  66. async createPlayerBullet3(worldPos: cc.Vec2){
  67. let time = 1;
  68. let prefab = await ResMgr.inst.getPrefab('monster/bullet');
  69. let bulletNode = ResMgr.inst.createNode(prefab, this.parent)
  70. let moveCpt = Utils.getCpt(MoveTime, bulletNode);
  71. moveCpt.dirction = cc.v2(0,1);
  72. moveCpt.speed = 500;
  73. moveCpt.overTime = time;
  74. moveCpt.call = ()=>{
  75. let num = 10;
  76. let angle = 360;
  77. let leftVec2 = cc.v2(1,1).normalize();
  78. for (let index = 0; index < num; index++) {
  79. let bulletNode1 = ResMgr.inst.createNode(prefab, this.parent)
  80. let bulletCpt = bulletNode1.getComponent(bullet);
  81. let moveCpt = Utils.getCpt(Move, bulletNode1);
  82. moveCpt.dirction = leftVec2.rotate(Utils.radian(-angle / (num) * index));
  83. moveCpt.speed = 500;
  84. bulletCpt.setDirction(moveCpt.dirction);
  85. bulletNode1.setPosition(bulletNode.getPosition());
  86. // console.log( "@@-", bulletNode1.getPosition().toString());
  87. }
  88. bulletNode.destroy();
  89. console.log('@@=',bulletNode.getPosition().toString());
  90. }
  91. let localPos = this.parent.convertToNodeSpaceAR(worldPos);
  92. bulletNode.setPosition(localPos);
  93. }
  94. async createPlayerBullet4(worldPos: cc.Vec2){
  95. let num = 8;
  96. let r = 40;
  97. let leftVec2 = cc.v2(0,1)
  98. let angle = 360;
  99. let prefab = await ResMgr.inst.getPrefab('monster/bullet');
  100. let node = new cc.Node('cricleBullet');
  101. this.parent.addChild(node);
  102. let moveCpt = Utils.getCpt(Move, node);
  103. moveCpt.dirction = cc.v2(0,1);
  104. moveCpt.speed = 500;
  105. let localPos = this.parent.convertToNodeSpaceAR(worldPos);
  106. node.setPosition(localPos);
  107. let t = cc.tween(node).by(1, {angle: 360}).repeatForever().start();
  108. let isOver = ()=>{
  109. if(cc.isValid(node, true)){
  110. if(node.childrenCount <= 0){
  111. t.stop();
  112. node.destroy();
  113. }
  114. }
  115. }
  116. for (let index = 0; index < num; index++) {
  117. let bulletNode = ResMgr.inst.createNode(prefab, node)
  118. let bulletCpt = bulletNode.getComponent(bullet);
  119. let dirction = leftVec2.rotate(Utils.radian(-angle / (num) * index));
  120. bulletNode.setPosition(dirction.mul(r));
  121. bulletCpt.setDirction(dirction.rotate(Utils.radian(90)));
  122. bulletNode.addComponent(ResRelease).call = function(){
  123. setTimeout(() => {
  124. isOver();
  125. }, 100);
  126. }
  127. }
  128. }
  129. }