# cocos2 场景跳转传参

cocos2 场景跳转传参

这是一个什么需求呢,就是我用cocos2.14.2开发了几个场景,其中一个首页,五六个场景,现在从首页点进去需要传递一个参数到其他场景里面进行判断用

分析

这个功能其实不是很难,但是对于没有用过或者写过的人来说确实没思路,现在就简单总结一下我的想法。

方法一

首先一个方法就是使用"常驻组件"。这样的话保证一个组件在系统里面常驻,切换到哪个场景也存在这个组件,可以把参数放到这个组件中保存,就是实现了传参,这个方法算是曲线救国吧,和我印象里面的传参不一样,我不喜欢,就没有用这个方法,当然是可以的哈!

方法二

我是用的是这种方法,就是通过单例模式,存储了一个全局的吧算是,全局的参数对象,跳转的时候把参数存起来,然后在另一个需要接收的场景里面去读取。关键就是在传的时候把数据push进去,需要的场景pull一下,有的话就是有传参,没有的话就是没有传参。

实现

实现的花很简单,首先创建一个全局文件:/SceneDataManager/SceneDataManager.ts

文件里面的内容也很简单:

typescript 复制代码
const { ccclass, property } = cc._decorator;

@ccclass('SceneDataManager')
export class SceneDataManager {
    private static instance: SceneDataManager;
    private params: { [key: string]: any } = {};

    private constructor() { }

    public static getInstance(): SceneDataManager {
        if (!SceneDataManager.instance) {
            SceneDataManager.instance = new SceneDataManager();
        }
        return SceneDataManager.instance;
    }

    // 存储参数
    public setParam(key: string, value: any): void {
        this.params[key] = value;
    }

    // 获取参数
    public getParam(key: string): any {
        return this.params[key];
    }

    // 清除参数
    public clearParam(key: string): void {
        delete this.params[key];
    }
}

使用的话也很简单,比如按照我的需求,在首页:

typescript 复制代码
  // 引用先
  import { SceneDataManager } from '../SceneDataManager/SceneDataManager';

  // 跳转场景传递参数
  chooseSceneFuncWithParams(params) {
    SceneDataManager.getInstance().setParam('sceneParams', { params: params});
    cc.director.loadScene("student");
  }

在接受参数的页面也很简单

typescript 复制代码
  // 先引入
  import { SceneDataManager } from '../SceneDataManager/SceneDataManager';

  // 页面加载回调
  start() {
    const sceneParams = SceneDataManager.getInstance().getParam('sceneParams'); // 获取传递的参数
    if (sceneParams) {
      SceneDataManager.getInstance().clearParam('sceneParams'); // 清空参数
      console.log("接收的参数---> ", sceneParams)
    }
  }

没了,就这些!

相关推荐
有梦想的程序星空14 分钟前
【环境配置】Vue3项目离线化本地部署echarts全攻略
前端·javascript·vue·echarts
IT_陈寒40 分钟前
被Vite的动态导入坑了一整天,原来问题出在这
前端·人工智能·后端
薛先生_09943 分钟前
vue-路由重定向
前端·javascript·vue.js
橘子星1 小时前
基于 ES6 语法的 NLP 任务模块化开发实践
前端·javascript
玉宇夕落1 小时前
Props的传递学习
前端
月光刺眼1 小时前
JS 底层执行机制探讨:执行上下文、变量提升与调用栈
前端·javascript
|_⊙2 小时前
Linux 信号
运维·服务器·前端
ZC跨境爬虫2 小时前
跟着 MDN 学 JavaScript day_1:什么是 JavaScript?
开发语言·前端·javascript·ecmascript
广州华水科技2 小时前
单北斗GNSS水库变形监测系统的应用与发展分析
前端
吠品2 小时前
PyTorch 踩坑:libtorch_cpu.so 找不到 iJIT_NotifyEvent 符号
前端·vue.js·elementui