GameController.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317
  1. import GameModel from "../Model/GameModel";
  2. import Toast from "../Utils/Toast";
  3. import SdkUtil from "../Utils/SdkUtil"
  4. import MusicImgChange from "../Utils/MusicImgChange"
  5. import AudioUtils from "../Utils/AudioUtils";
  6. cc.Class({
  7. extends: cc.Component,
  8. properties: {
  9. grid:{
  10. default:null,
  11. type:cc.Node
  12. },
  13. audioButton:{
  14. default: null,
  15. type: cc.Node
  16. },
  17. audioSource:{
  18. type:cc.AudioSource
  19. },
  20. skillTip:{
  21. default:null,
  22. type:cc.Node
  23. },
  24. //点击时的音效
  25. click:{
  26. default:null,
  27. type: cc.AudioClip
  28. },
  29. isVideoAd:false,
  30. // //只消除一个的道具数量
  31. // eliminateOneNum:10,
  32. //
  33. // //暂停步数的道具数量
  34. // stepPauseNum:10,
  35. //
  36. // //剩余刷新次数
  37. // refreshNum:10,
  38. //
  39. // //消除整行的道具数量
  40. // crushRowAllNum:8,
  41. //静音按钮是否按下:false表示未按下
  42. musicBtnState: false,
  43. },
  44. isCrushOne: false, //消除一个格子
  45. isStepPause: false, //计步器
  46. isCrushRow: false, //消除整行
  47. isCrushCol: false, //消除整列
  48. isCrushOneType: false, //消除一种类型
  49. // LIFE-CYCLE CALLBACKS:
  50. onLoad () {
  51. let audioButton = this.node.parent.getChildByName("AudioButton")
  52. audioButton.on("click",this.callback,this)
  53. SdkUtil.Instance.motivational_Video_Load()
  54. this.gameModel = new GameModel();
  55. this.gameModel.init(4);
  56. this.gridScript = this.grid.getComponent("GridView");
  57. this.gridScript.setController(this);
  58. this.gridScript.initWithCellModels(this.gameModel.getCells());
  59. this.audioSource = cc.find("Canvas/GameScene")._components[1].audio;
  60. },
  61. callback(){
  62. let state = this.audioSource._state;
  63. state === 1 ? this.audioSource.pause() : this.audioSource.play();
  64. Toast(state === 1 ? "关闭背景音乐🎵" : "打开背景音乐🎵");
  65. },
  66. //音乐开关按钮
  67. musicBtn(){
  68. let sprite = cc.find("Canvas/MusicBtn")
  69. // console.log(sprite)
  70. // sprite.getComponent(cc.Sprite).spriteFrame = sprite.getComponent("MusicImgChange").imgOff
  71. this.musicBtnState = !this.musicBtnState;
  72. if (this.musicBtnState){
  73. // console.log("音乐关")
  74. this.audioSource.pause()
  75. sprite.getComponent(cc.Sprite).spriteFrame = sprite.getComponent("MusicImgChange").imgOff
  76. }else {
  77. // console.log("音乐开")
  78. this.audioSource.play()
  79. sprite.getComponent(cc.Sprite).spriteFrame = sprite.getComponent("MusicImgChange").imgOn
  80. }
  81. },
  82. selectCell(pos){
  83. // console.log("ppos:",pos)
  84. return this.gameModel.selectCell(pos);
  85. },
  86. cleanCmd(){
  87. this.gameModel.cleanCmd();
  88. },
  89. start () {
  90. //初始化加载的动物种类的数量
  91. // this.initNum = 4;
  92. //只消除一个的道具数量
  93. this.eliminateOneNum = 10;
  94. //暂停步数的道具数量
  95. this.stepPauseNum = 10;
  96. //剩余刷新次数
  97. this.refreshNum = 10;
  98. //消除整行的道具数量
  99. this.crushRowAllNum = 10;
  100. //消除整列的道具数量
  101. this.crushColAllNum = 10;
  102. //消除一种类型的道具数据
  103. this.crushOneTypeNum = 10;
  104. },
  105. update (dt) {
  106. //获取只消除一个的道具数量
  107. let eliminateNum = cc.find("Canvas/BottomUtils/Utils/eliminateOne/eliminateOneNum").getComponent(cc.Label);
  108. eliminateNum.string = this.eliminateOneNum;
  109. //获取暂停步数的道具数量
  110. let stepPauseNum = cc.find("Canvas/BottomUtils/Utils/stepPause/stepPauseNum").getComponent(cc.Label);
  111. stepPauseNum.string = this.stepPauseNum;
  112. //获取刷新次数
  113. let refreshNum = cc.find("Canvas/BottomUtils/Utils/refresh/refreshNum").getComponent(cc.Label);
  114. refreshNum.string = this.refreshNum;
  115. //获取消除整行的道具数量
  116. let crushOneRow = cc.find("Canvas/BottomUtils/Utils/crushRow/crushRowNum").getComponent(cc.Label);
  117. crushOneRow.string = this.crushRowAllNum;
  118. //获取消除整列的道具数量
  119. let crushOneCol = cc.find("Canvas/BottomUtils/Utils/crushCol/crushColNum").getComponent(cc.Label);
  120. crushOneCol.string = this.crushColAllNum;
  121. //获取消除一种类型的道具数量
  122. let crushOneType = cc.find("Canvas/BottomUtils/Utils/bombOne/crushOneTypeNum").getComponent(cc.Label);
  123. crushOneType.string = this.crushOneTypeNum;
  124. },
  125. //道具消除一个块
  126. processCrushOne(pos){
  127. return this.gameModel.processCrushOne(pos);
  128. },
  129. //道具消除一行
  130. processCrushRow(pos){
  131. return this.gameModel.processCrushRow(pos);
  132. },
  133. //道具消除一列
  134. processCrushCol(pos){
  135. return this.gameModel.processCrushCol(pos);
  136. },
  137. //道具消除一种类型
  138. processCrushOneType(pos){
  139. return this.gameModel.processCrushOneType(pos);
  140. },
  141. onSkill(e,type){
  142. if(this.isVideoAd){
  143. SdkUtil.Instance.motivational_Video_Show(()=>{
  144. this[type]()
  145. }, ()=>{
  146. console.log('激励广告加载失败')
  147. })
  148. }else{
  149. this[type]()
  150. }
  151. },
  152. //道具消除一个
  153. onEliminateOne(){
  154. cc.audioEngine.play(this.click, false, 1);
  155. if (this.gridScript.isInPlayAni) {
  156. return
  157. }
  158. if (this.eliminateOneNum > 0){
  159. this.eliminateOneNum--;
  160. this.isCrushOne = true;
  161. const msg = this.skillTip.getChildByName("msg");
  162. msg.getComponent(cc.Label).string = "选择一个需要消除的块"
  163. this.showSkillTip(true);
  164. }else {
  165. Toast("道具已用完")
  166. }
  167. },
  168. //步数暂停
  169. onStepPause(){
  170. cc.audioEngine.play(this.click, false, 1);
  171. if (this.gridScript.isInPlayAni) {
  172. return
  173. };
  174. if (this.stepPauseNum > 0){
  175. this.stepPauseNum--;
  176. this.isStepPause = true;
  177. const msg = this.skillTip.getChildByName("msg");
  178. msg.getComponent(cc.Label).string = "步数暂停中";
  179. this.showSkillTip(true);
  180. }else {
  181. Toast("道具已用完")
  182. }
  183. },
  184. //刷新
  185. onRefresh(){
  186. cc.audioEngine.play(this.click, false, 1);
  187. if (this.gridScript.isInPlayAni) {
  188. return
  189. };
  190. if (this.refreshNum > 0){
  191. this.refreshNum--;
  192. this.grid.children.forEach(item => {
  193. if (item.name != "bg"){
  194. item.destroy();
  195. }
  196. })
  197. this.gameModel = new GameModel();
  198. this.gameModel.init(4);
  199. this.gridScript = this.grid.getComponent("GridView");
  200. this.gridScript.setController(this);
  201. this.gridScript.initWithCellModels(this.gameModel.getCells());
  202. // console.log(this.refreshNum)
  203. }else {
  204. Toast("刷新次数已用完")
  205. }
  206. },
  207. showSkillTip(isShow){
  208. // console.log("isShow:",isShow)
  209. this.skillTip.active = isShow;
  210. },
  211. //道具消除整行
  212. onSkillRowAll(){
  213. // console.log("点击了消除整行按钮")
  214. cc.audioEngine.play(this.click, false, 1);
  215. if (this.gridScript.isInPlayAni) {
  216. return
  217. }
  218. if (this.crushRowAllNum > 0){
  219. this.crushRowAllNum--;
  220. this.isCrushRow = true;
  221. const msg = this.skillTip.getChildByName("msg");
  222. msg.getComponent(cc.Label).string = "选择需要删除的行";
  223. this.showSkillTip(true);
  224. }else {
  225. Toast("道具已用完")
  226. }
  227. },
  228. //道具消除整列
  229. onSkillColAll(){
  230. // console.log("点击了消除整列")
  231. cc.audioEngine.play(this.click, false, 1); //增加点击音效
  232. if (this.gridScript.isInPlayAni) {
  233. return
  234. }
  235. if (this.crushColAllNum > 0){
  236. this.crushColAllNum--;
  237. this.isCrushCol = true;
  238. const msg = this.skillTip.getChildByName("msg");
  239. msg.getComponent(cc.Label).string = "选择需要删除的列";
  240. this.showSkillTip(true);
  241. }else {
  242. Toast("道具已用完")
  243. }
  244. },
  245. //道具消除一种类型
  246. onSkillOneType(){
  247. // console.log("点击了消除一种类型")
  248. // let nowAllCells = this.gameModel.getCells();
  249. // console.log("当前所有格子:",nowAllCells)
  250. cc.audioEngine.play(this.click, false, 1);
  251. if (this.gridScript.isInPlayAni) {
  252. return
  253. }
  254. if (this.crushOneTypeNum > 0){
  255. this.crushOneTypeNum--;
  256. this.isCrushOneType = true;
  257. const msg = this.skillTip.getChildByName("msg");
  258. msg.getComponent(cc.Label).string = "选择需要删除的类型";
  259. this.showSkillTip(true);
  260. }else {
  261. Toast("道具已用完")
  262. }
  263. }
  264. });
  265. /**
  266. * 组件脚本:
  267. * AudioUtils.js、CellView.js、EffectLayer.js、GameController.js、GridView.js、LoginController.js
  268. *
  269. */