当前位置:网站首页>【cocos creator】点击按钮切换界面
【cocos creator】点击按钮切换界面
2022-07-03 07:44:00 【烧仙草奶茶】
点击按钮切换界面

import Util from "./Util";
const {
ccclass, property } = cc._decorator;
@ccclass
export default class mainTab extends cc.Component {
//gamelayer
@property(cc.Node)
gameLayer: cc.Node = null;
//按钮
@property([cc.Node])
buttoms: cc.Node[] = [];
//页面
@property([cc.Prefab || cc.Node])
pages: cc.Prefab[] | cc.Node[] = [];
//默认放在主界面中的界面
@property(cc.Node)
public mainPage: cc.Node = null;
_scenes: cc.Node[] = []
_scenes_now: string = "";
_lode_finish: boolean = false;
public _couldTouch: boolean = false;
onLoad(): void {
this.loadScene();
// EventMgr.listen(GameEventType.CHANGE_MAIN_SCENE, this.onChangeMainScene, this);
for (let i = 0; i < this.buttoms.length; i++) {
const element = this.buttoms[i];
if (!this.pages[i]) {
cc.error("mainTab---按钮和页面数量不对应");
return;
}
Util.registerBtnEvent(element, this.changePage, this, this.pages[i].name, {
isScale: false });
}
this.onSceneChange({
pageName: this.mainPage.name });
}
loadScene() {
let sceneName = "mainPage";
this.loadScenes(sceneName, this.mainPage)
}
onChangeMainScene(data) {
let index = this.pages.findIndex((item) => {
return item.name == data.pageName })
if (index == -1) {
cc.error("切换失败!未加载页面" + data.pageName);
return;
}
this.onChangeCheck(data);
this.onSceneChange(data);
}
onMainLoad() {
this._couldTouch = true;
}
/** * 页面切换 * @param target * @param name * @returns */
changePage(target: cc.Node, name: string) {
if (!this._couldTouch) {
return;
}
// cc.log(target, name);
// EventMgr.trigger(GameEventType.CHANGE_MAIN_SCENE, { pageName: name });
this.onChangeMainScene({
pageName: name })
}
/** * 加载tab场景 * @param SceneName * @param firstScene * @param cb */
loadScenes(SceneName: string, firstScene: cc.Node, cb?) {
this._lode_finish = false;
this._scenes.push(firstScene);
let js = Util.getScript(firstScene);
if (js) js._init && js._init();
firstScene.active = true;
cc.resources.loadDir(SceneName, (e, res: cc.Prefab[]) => {
if (e) {
console.error(`加载mainPage错误`, e);
return;
}
for (let i = 0; i < res.length; i++) {
const element = res[i];
if (element.name == firstScene.name) {
continue;
}
let index = this.pages.findIndex((item) => {
return item.name == element.name })
if (index == -1) {
cc.assetManager.releaseAsset(element);
continue;
}
let node: cc.Node = cc.instantiate(element);
if (node) {
this._scenes.push(node);
node.active = false;
node.parent = this.gameLayer;
let js = Util.getScript(node);
if (js) cb && cb(js);
}
}
this._lode_finish = true;
this.onMainLoad()
});
this._scenes_now = firstScene.name;
}
//切换页面前处理
onChangeCheck(data) {
if (data.pageName == this._scenes_now || !this._lode_finish) return;
//页面拉取数据
// if (data.pageName == "") {
// }
this.onChangePage(data);
}
onChangePage(data) {
if (data.pageName == this._scenes_now || !this._lode_finish) return;
this._scenes_now = data.pageName;
for (let i = 0; i < this._scenes.length; i++) {
const element = this._scenes[i];
if (element.name == data.pageName) {
element.active = true;
let js = Util.getScript(element);
if (js) js._init && js._init(data.data);
}
else {
element.active = false;
}
}
}
onSceneChange(data) {
this.buttoms.forEach(element => {
let eventName = "";
if (element.getComponent(cc.Button) && element.getComponent(cc.Button).clickEvents.length) {
eventName = element.getComponent(cc.Button).clickEvents[0].customEventData;
}
//选中的按钮
if (eventName == data.pageName) {
element.scale = 1;
return;
}
//未选中的按钮
element.scale = 0.8;
});
}
onDestroy() {
// EventMgr.ignoreAll(this);
}
}
demo下载:
https://download.csdn.net/download/K86338236/85836249
边栏推荐
- Huawei s5700 switch initialization and configuration Telnet, SSH user methods
- 华为交换机基础配置(telnet/ssh登录)
- C2-关于VCF文件合并的几种方法
- go语言-循环语句
- PDO and SDO concepts
- PAT甲级 1031 Hello World for U
- Unity XR实现交互(抓取,移动旋转,传送,射击)-Pico
- Go language foundation ----- 03 ----- process control, function, value transfer, reference transfer, defer function
- LwIP learning socket (API)
- Go language foundation ----- 11 ----- regular expression
猜你喜欢

Technology dry goods | Roberta of the migration of mindspore NLP model - emotion analysis task

Technical dry goods | hundred lines of code to write Bert, Shengsi mindspire ability reward

Redis batch startup and shutdown script

Technical dry goods Shengsi mindspire operator parallel + heterogeneous parallel, enabling 32 card training 242 billion parameter model

Analysis of the problems of the 10th Blue Bridge Cup single chip microcomputer provincial competition

Pat grade a 1027 colors in Mars

研究显示乳腺癌细胞更容易在患者睡觉时进入血液

Technical dry goods Shengsi mindspire dynamic transformer with variable sequence length has been released!

PAT甲级 1030 Travel Plan

在浏览器输入url后执行什么
随机推荐
EtherCAT state machine transition (ESM)
IndexSort
【MySQL 11】怎么解决MySQL 8.0.18 大小写敏感问题
Traversal in Lucene
HarmonyOS第三次培训笔记
PAT甲级 1032 Sharing
优质博客——
HDMI2.1与HDMI2.0的区别以及转换PD信号。
[mindspire paper presentation] summary of training skills in AAAI long tail problem
PDO and SDO concepts
tp3.2和tp5.0的区别
Go language foundation ----- 10 ----- string related operations (operation function, string conversion)
yarn link 是如何帮助开发者对 NPM 包进行 debug 的?
Technical dry goods | thinking about the unification of dynamic and static diagrams of AI framework
研究显示乳腺癌细胞更容易在患者睡觉时进入血液
GoLang之结构体
Huawei s5700 switch initialization and configuration SSH and telnet remote login methods
Robots protocol
Redis batch startup and shutdown script
Structure of golang