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. node.getChildByName("progressbar_hp").getComponent(ProgressBar).progress = 0
  104. const imgMask: Node = node.getChildByName("icon_mask")
  105. const default_icon: Node = node.getChildByName("img_icon")
  106. const imgNode: Node = imgMask.getChildByName("user_icon")
  107. imgNode.getComponent(UIOpacity).opacity = 100
  108. default_icon.active = false
  109. }
  110. }
  111. }
  112. treat(node: Node) {
  113. let attackFrameId: number = 1
  114. let frameId: number = 1
  115. node.getChildByName("effect_pannel").scale = new Vec3(0.8, 0.8, 0.8)
  116. this.schedule(
  117. () => {
  118. if (frameId <= 62 && this.treatFrames[frameId - 1]) {
  119. node.getChildByName("effect_pannel").getComponent(Sprite).spriteFrame =
  120. this.treatFrames[frameId - 1]
  121. node.getChildByName("effect_pannel").scale = new Vec3(1, 1, 1)
  122. frameId++
  123. }
  124. },
  125. 0.02,
  126. 62,
  127. 0
  128. )
  129. //白色效果
  130. const effectPannel2: Node = node.getChildByName("effect_pannel3")
  131. const uiopa = effectPannel2.getComponent(UIOpacity)
  132. uiopa.opacity = 240
  133. tween(uiopa).to(2, { opacity: 0 }).start()
  134. }
  135. newPlayer(node: Node, person: any) {
  136. const imgMask: Node = node.getChildByName("icon_mask")
  137. const imgNode: Node = imgMask.getChildByName("user_icon")
  138. const nameNode: Node = node.getChildByName("text_name")
  139. const pbNode: Node = node.getChildByName("progressbar_hp")
  140. const effect: Node = node.getChildByName("effect_pannel")
  141. const default_icon: Node = node.getChildByName("img_icon")
  142. //新角色席位刷新头像
  143. if (nameNode.active) {
  144. //已存在则只更新hp
  145. pbNode.getComponent(ProgressBar).progress = person.hp / 100
  146. } else {
  147. // 远程 url 带图片后缀名
  148. let remoteUrl = person.avatar
  149. assetManager.loadRemote<ImageAsset>(remoteUrl, (err, imageAsset) => {
  150. const spriteFrame = new SpriteFrame()
  151. const texture = new Texture2D()
  152. texture.image = imageAsset
  153. spriteFrame.texture = texture
  154. // ...
  155. imgNode.getComponent(Sprite).spriteFrame = spriteFrame
  156. let frameId: number = 1
  157. this.schedule(
  158. () => {
  159. if (frameId <= 79 && this.loadedFrames[frameId - 1]) {
  160. node.getChildByName("effect_pannel").getComponent(Sprite).spriteFrame =
  161. this.loadedFrames[frameId - 1]
  162. frameId++
  163. }
  164. },
  165. 0.0168,
  166. 79,
  167. 0
  168. )
  169. tween(imgMask)
  170. .by(2, { position: new Vec3(0, -100, 0) }) // 父节点向下移动
  171. .start()
  172. tween(imgNode)
  173. .by(2, { position: new Vec3(0, 100, 0) }) // 子节点向上移动
  174. .call(() => {
  175. nameNode.getComponent(Label).string = person.name
  176. nameNode.active = true
  177. pbNode.getComponent(ProgressBar).progress = person.hp / 100
  178. pbNode.active = true
  179. if (person.hp === 0) {
  180. default_icon.active = false
  181. imgNode.getComponent(UIOpacity).opacity = 130
  182. }
  183. })
  184. .start()
  185. })
  186. }
  187. }
  188. }