SelectLevel.ts 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import { _decorator, Button, Component, Node, director, PageView, resources, SpriteAtlas, error, Asset, Sprite, UITransform, SpriteFrame } from 'cc';
  2. import { GameInfo } from './GameInfo';
  3. import { resMgr } from './Frames/ResourcesMgr';
  4. import { gameResMgr } from './Game/GameResMgr';
  5. const { ccclass, property } = _decorator;
  6. @ccclass('SelectLevel')
  7. export class SelectLevel extends Component {
  8. selectTheme: Node = null;
  9. pageViewLv: Node = null;
  10. btnStart: Node = null;
  11. btnBack: Node = null;
  12. private _themeBgLeft: Node = null;
  13. private _themeBgRight: Node = null;
  14. protected onLoad(): void {
  15. this.btnStart = this.node.getChildByPath("UI_SelectLv/BtnStart");
  16. this.btnBack = this.node.getChildByPath("UI_SelectLv/BtnBack");
  17. this.selectTheme = this.node.parent.getChildByPath("SelectTheme");
  18. this.pageViewLv = this.node.getChildByName("PageViewLv");
  19. this._themeBgLeft = this.node.getChildByName("Theme_bgLeft");
  20. this._themeBgRight = this.node.getChildByName("Theme_bgRight");
  21. }
  22. protected onEnable(): void {
  23. this._loadLvRes();
  24. this.btnStart.getComponent(Button).interactable = true;
  25. }
  26. start() {
  27. //this._LoadLvRes();
  28. this.btnStart.on(Button.EventType.CLICK,this.onBtnStart,this);
  29. this.btnBack.on(Button.EventType.CLICK,this.onBtnBack,this);
  30. this.pageViewLv.on(PageView.EventType.PAGE_TURNING,()=>{
  31. //滑动过程当中 “开始游戏” 按钮无效
  32. this.btnStart.getComponent(Button).enabled = false;
  33. })
  34. this.pageViewLv.on(PageView.EventType.SCROLL_ENDED,()=>{
  35. //滑动结束 “开始按钮” 生效
  36. this.btnStart.getComponent(Button).enabled = true;
  37. })
  38. //true=>当前主题都可以玩,“开始按钮”不用禁用
  39. if(GameInfo.Instance.isAllLvUnlocked()){
  40. return;
  41. }
  42. this.pageViewLv.on(PageView.EventType.SCROLL_ENDED,()=>{
  43. const index = this.pageViewLv.getComponent(PageView).curPageIdx + 1;
  44. this.btnStart.getComponent(Button).interactable = (index <= GameInfo.Instance.UnLockLv);
  45. // if(index > GameInfo.Instance.UnLockLv){
  46. // this.btnStart.getComponent(Button).interactable = false;
  47. // } else {
  48. // this.btnStart.getComponent(Button).interactable = true;
  49. // }
  50. })
  51. }
  52. async onBtnStart(){
  53. GameInfo.Instance.CurLv = this.pageViewLv.getComponent(PageView).curPageIdx + 1;
  54. await gameResMgr.loadGameRes()
  55. director.loadScene("MainScene");
  56. }
  57. onBtnBack(){
  58. //清空pageView的content下的节点
  59. this.pageViewLv.getComponent(PageView).removeAllPages();
  60. //选关节点隐藏,选主题节点激活
  61. if(this.node.active){
  62. if(!this.selectTheme.active){
  63. this.selectTheme.active = true;
  64. }
  65. this.node.active = false;
  66. }
  67. }
  68. //资源导入
  69. private _loadLvRes(){
  70. const theme = GameInfo.Instance.CurTheme;
  71. for(let i = 1; i <= 12; i++){
  72. let name: string = "000" + i;
  73. name = name.slice(name.length - 2);
  74. name = `Theme${theme}_map${name}`;
  75. const frame = resMgr.getSpriteFrame(name);
  76. this.pageViewLv.getComponent(PageView).addPage(this._setNode(frame));
  77. }
  78. this._themeBgLeft.getComponent(Sprite).spriteFrame = resMgr.getSpriteFrame("Theme"+ theme + "_bgLeft");
  79. this._themeBgRight.getComponent(Sprite).spriteFrame = resMgr.getSpriteFrame("Theme" + theme + "_bgRight");
  80. // resources.load("Res/ThemeMap/Theme0" + theme ,SpriteAtlas,(error:Error | null,asset:SpriteAtlas)=>{
  81. // if(error){
  82. // console.error("No found Theme0" + theme);
  83. // } else {
  84. // for (const frame of asset.getSpriteFrames()) {
  85. // if(frame.name.includes("_map")){
  86. // this.pageViewLv.getComponent(PageView).addPage(this._setNode(frame));
  87. // }
  88. // }
  89. // this._themeBgLeft.getComponent(Sprite).spriteFrame = asset.getSpriteFrame("Theme"+ theme + "_bgLeft");
  90. // this._themeBgRight.getComponent(Sprite).spriteFrame = asset.getSpriteFrame("Theme" + theme + "_bgRight");
  91. // }
  92. // })
  93. }
  94. //设置PageView的页面
  95. private _setNode(frame: SpriteFrame): Node{
  96. const node = new Node();
  97. node.addComponent(Sprite);
  98. node.getComponent(UITransform).setContentSize(500, 300);
  99. node.getComponent(Sprite).sizeMode = Sprite.SizeMode.CUSTOM;
  100. node.getComponent(Sprite).type = Sprite.Type.SLICED;
  101. node.getComponent(Sprite).spriteFrame = frame;
  102. return node;
  103. }
  104. update(deltaTime: number) {
  105. }
  106. }