RoleCtr.ts 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import {
  2. _decorator,
  3. assetManager,
  4. AssetManager,
  5. Color,
  6. Component,
  7. ImageAsset,
  8. Label,
  9. Node,
  10. ProgressBar,
  11. resources,
  12. Sprite,
  13. SpriteFrame,
  14. Texture2D,
  15. tween,
  16. Tween,
  17. UIOpacity,
  18. Vec2,
  19. Vec3
  20. } from "cc"
  21. const { ccclass, property } = _decorator
  22. @ccclass("RoleCtr")
  23. export class RoleCtr extends Component {
  24. @property({ type: Node })
  25. public roleNodes: Node[] = []
  26. private loadedFrames = []
  27. private treatFrames = []
  28. public deathNodes: any[] = []
  29. start() {
  30. this.preloadAllFrames()
  31. }
  32. preloadAllFrames() {
  33. for (let i = 1; i <= 62; i++) {
  34. resources.load(`effect/treat/图层 ${i}/spriteFrame`, SpriteFrame, (err, spriteFrame) => {
  35. if (!err && spriteFrame) {
  36. this.treatFrames[i - 1] = spriteFrame
  37. }
  38. })
  39. }
  40. for (let i = 1; i <= 79; i++) {
  41. resources.load(`effect/scan/图层 ${i}/spriteFrame`, SpriteFrame, (err, spriteFrame) => {
  42. if (!err && spriteFrame) {
  43. this.loadedFrames[i - 1] = spriteFrame
  44. }
  45. })
  46. }
  47. }
  48. update(deltaTime: number) {}
  49. attack(node: Node) {
  50. console.log(node)
  51. var attackFrameId: number = 1
  52. node.getChildByName("effect_pannel").scale = new Vec3(0.8, 0.8, 0.8)
  53. this.schedule(
  54. () => {
  55. resources.load(`effect/attack1/图层 ${attackFrameId}/spriteFrame`, SpriteFrame, (err, spriteFrame) => {
  56. if (!err && spriteFrame) {
  57. node.getChildByName("effect_pannel").getComponent(Sprite).spriteFrame = spriteFrame
  58. if (attackFrameId == 15) {
  59. attackFrameId = 1
  60. node.getChildByName("effect_pannel").scale = new Vec3(1, 1, 1)
  61. } else {
  62. attackFrameId++
  63. }
  64. } else {
  65. console.log(err)
  66. }
  67. })
  68. },
  69. 0.03,
  70. 15,
  71. 0
  72. )
  73. //红色效果
  74. const effectPannel2: Node = node.getChildByName("effect_pannel2")
  75. const uiopa = effectPannel2.getComponent(UIOpacity)
  76. uiopa.opacity = 200
  77. tween(uiopa).to(0.5, { opacity: 0 }).start()
  78. //shake
  79. tween(node)
  80. .by(0.1, { position: new Vec3(5, 0, 0) }) // 向右移动5个单位
  81. .by(0.1, { position: new Vec3(-10, 0, 0) }) // 向左移动10个单位
  82. .by(0.1, { position: new Vec3(10, 0, 0) }) // 向右移动10个单位
  83. .by(0.1, { position: new Vec3(-10, 0, 0) }) // 向左移动10个单位
  84. .by(0.1, { position: new Vec3(5, 0, 0) }) // 向右移动5个单位回到原位置
  85. .call(() => {
  86. //角色死亡,处理为透明
  87. let hp = node.getChildByName("progressbar_hp").getComponent(ProgressBar).progress
  88. if (hp == 0) {
  89. const imgMask: Node = node.getChildByName("icon_mask")
  90. const default_icon: Node = node.getChildByName("img_icon")
  91. const imgNode: Node = imgMask.getChildByName("user_icon")
  92. imgNode.getComponent(UIOpacity).opacity = 100
  93. default_icon.active = false
  94. }
  95. })
  96. .start()
  97. }
  98. //单独处理死亡
  99. dealDeath(roleNodes: any) {
  100. for (let i = 0; i < this.deathNodes.length; i++) {
  101. const node = roleNodes[this.deathNodes[i].name]
  102. if (node) {
  103. let hp = node.getChildByName("progressbar_hp").getComponent(ProgressBar).progress
  104. hp = 0
  105. const imgMask: Node = node.getChildByName("icon_mask")
  106. const default_icon: Node = node.getChildByName("img_icon")
  107. const imgNode: Node = imgMask.getChildByName("user_icon")
  108. imgNode.getComponent(UIOpacity).opacity = 100
  109. default_icon.active = false
  110. }
  111. }
  112. }
  113. treat(node: Node) {
  114. let attackFrameId: number = 1
  115. let frameId: number = 1
  116. node.getChildByName("effect_pannel").scale = new Vec3(0.8, 0.8, 0.8)
  117. this.schedule(
  118. () => {
  119. if (frameId <= 62 && this.treatFrames[frameId - 1]) {
  120. node.getChildByName("effect_pannel").getComponent(Sprite).spriteFrame =
  121. this.treatFrames[frameId - 1]
  122. node.getChildByName("effect_pannel").scale = new Vec3(1, 1, 1)
  123. frameId++
  124. }
  125. },
  126. 0.02,
  127. 62,
  128. 0
  129. )
  130. //白色效果
  131. const effectPannel2: Node = node.getChildByName("effect_pannel3")
  132. const uiopa = effectPannel2.getComponent(UIOpacity)
  133. uiopa.opacity = 240
  134. tween(uiopa).to(2, { opacity: 0 }).start()
  135. }
  136. newPlayer(node: Node, person: any) {
  137. const imgMask: Node = node.getChildByName("icon_mask")
  138. const imgNode: Node = imgMask.getChildByName("user_icon")
  139. const nameNode: Node = node.getChildByName("text_name")
  140. const pbNode: Node = node.getChildByName("progressbar_hp")
  141. const effect: Node = node.getChildByName("effect_pannel")
  142. const default_icon: Node = node.getChildByName("img_icon")
  143. //新角色席位刷新头像
  144. if (nameNode.active) {
  145. //已存在则只更新hp
  146. pbNode.getComponent(ProgressBar).progress = person.hp / 100
  147. } else {
  148. // 远程 url 带图片后缀名
  149. let remoteUrl = person.avatar
  150. assetManager.loadRemote<ImageAsset>(remoteUrl, (err, imageAsset) => {
  151. const spriteFrame = new SpriteFrame()
  152. const texture = new Texture2D()
  153. texture.image = imageAsset
  154. spriteFrame.texture = texture
  155. // ...
  156. imgNode.getComponent(Sprite).spriteFrame = spriteFrame
  157. let frameId: number = 1
  158. this.schedule(
  159. () => {
  160. if (frameId <= 79 && this.loadedFrames[frameId - 1]) {
  161. node.getChildByName("effect_pannel").getComponent(Sprite).spriteFrame =
  162. this.loadedFrames[frameId - 1]
  163. frameId++
  164. }
  165. },
  166. 0.0168,
  167. 79,
  168. 0
  169. )
  170. tween(imgMask)
  171. .by(2, { position: new Vec3(0, -100, 0) }) // 父节点向下移动
  172. .start()
  173. tween(imgNode)
  174. .by(2, { position: new Vec3(0, 100, 0) }) // 子节点向上移动
  175. .call(() => {
  176. nameNode.getComponent(Label).string = person.name
  177. nameNode.active = true
  178. pbNode.getComponent(ProgressBar).progress = person.hp / 100
  179. pbNode.active = true
  180. if (person.hp === 0) {
  181. default_icon.active = false
  182. imgNode.getComponent(UIOpacity).opacity = 130
  183. }
  184. })
  185. .start()
  186. })
  187. }
  188. }
  189. }