当前位置:网站首页>【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
边栏推荐
- Microsoft Security Response Center
- 一篇文章让你读懂-曼彻斯特编码
- 技术干货|AI框架动静态图统一的思考
- PAT甲级 1027 Colors in Mars
- Introduction of novel RNA based cancer therapies
- 【MindSpore论文精讲】AAAI长尾问题中训练技巧的总结
- 技术干货|昇思MindSpore NLP模型迁移之Roberta ——情感分析任务
- PAT甲级 1030 Travel Plan
- go语言-循环语句
- Go language foundation ----- 11 ----- regular expression
猜你喜欢

【LeetCode】2. Valid parentheses · valid parentheses

Go language foundation ----- 18 ----- collaboration security, mutex lock, read-write lock, anonymous lock, sync Once

技术干货|昇思MindSpore NLP模型迁移之LUKE模型——阅读理解任务

密西根大学张阳教授受聘中国上海交通大学客座教授(图)

【MindSpore论文精讲】AAAI长尾问题中训练技巧的总结

EtherCAT state machine transition (ESM)

Lucene hnsw merge optimization
![[MySQL 14] use dbeaver tool to remotely backup and restore MySQL database (Linux Environment)](/img/38/3435d353e50b19fe09c8ab9db52204.png)
[MySQL 14] use dbeaver tool to remotely backup and restore MySQL database (Linux Environment)

The difference between hdmi2.1 and hdmi2.0 and the conversion of PD signals.

Es writing fragment process
随机推荐
技术干货|AI框架动静态图统一的思考
Go language foundation ----- 02 ----- basic data types and operators
Precautions for opensips and TLS SIP trunk docking
Go language foundation ----- 15 ----- reflection
Structure of golang
[MySQL 12] MySQL 8.0.18 reinitialization
Huawei switch: configure Telnet, SSH and web access
When did you find out that youth was over
Implementation of breadth first in aggregation in ES
LwIP learning socket (API)
Technical dry goods | Bert model for the migration of mindspore NLP model - text matching task (2): training and evaluation
技术干货|昇思MindSpore NLP模型迁移之Bert模型—文本匹配任务(二):训练和评估
static关键字
Introduction of novel RNA based cancer therapies
【踩坑系列】mysql 修改root密码失败
技术干货|关于AI Architecture未来的一些思考
Technical dry goods Shengsi mindspire dynamic transformer with variable sequence length has been released!
Redis batch startup and shutdown script
Robots protocol
Go language foundation ----- 18 ----- collaboration security, mutex lock, read-write lock, anonymous lock, sync Once