• 学习笔记_Cocos Creator_继承组件单例


    官方文档:https://docs.cocos.com/creator/manual/zh/scripting/reference/class.html

    前言

    单例,在游戏开发中是比较常用的功能,全局唯一,可以在任何地方直接获取, 
    省去了方法赋值 或者 属性面板拖动的麻烦。
    普通单例_饿汉模式

    不管有没调用,一开始就创建单例

     1 // Singleton.js 
     2 var Singleton = cc.Class({
     3 
     4     // 成员变量
     5     name : "",
     6     age : 0,
     7 
     8     ctor () {
     9         this.name = "Leovany";
    10         this.age = 20;
    11     },
    12     statics: {
    13         _instance: null
    14     },
    15 
    16     printInfo(){
    17         cc.warn("name = " + this.name+",age = " + this.age);
    18     }
    19 });
    20 
    21 Singleton._instance = new Singleton();
    22 module.exports = Singleton;
     1 // GameManager.js
     2 // 引入单例类
     3 var Singleton = require("Singleton");
     4 
     5 var GameManager = cc.Class({
     6         cc.warn(Singleton._instance.name);
     7         Singleton._instance.printInfo();
     8 });
    普通单例_饱汉模式

    调用时才创建单例对象

     1 // Singleton.js 
     2 var Singleton = cc.Class({
     3     // 成员变量
     4     name : "",
     5     age : 0,
     6 
     7     ctor () {
     8         this.name = "Leovany";
     9         this.age = 20;
    10     },
    11 
    12 
    13     printInfo(){
    14         cc.warn("name = " + this.name+",age = " + this.age);
    15     }
    16 });
    17 
    18 Singleton._instance = null;
    19 Singleton.getInstance = function () {
    20     if(!Singleton._instance){
    21         Singleton._instance = new Singleton();
    22     }
    23     return Singleton._instance;
    24 }
    25 
    26 module.exports = Singleton;
    1 // GameManager.js 
    2 // 引入单例类
    3 var Singleton = require("Singleton");
    4 
    5 var GameManager = cc.Class({
    6         // 调用
    7         cc.warn(Singleton.getInstance().name);
    8         Singleton.getInstance().printInfo();
    9 });

    单例组件

    1.新建一个 GameManager.js

     1 // 开头必须 新建一个变量引用 var GameManager
     2 var GameManager = cc.Class({
     3     extends: cc.Component,
     4     properties: {
     5         age : 20
     6     },
     7     statics: {
     8         _instance : null
     9     },
    10     //最先进入地方
    11     onLoad(){
    12         cc.warn(" ============== GameManager init" );
    13         GameManager._instance = this; 
    14          //设置帧率
    15         cc.game.setFrameRate(60);
    16         //设置该对象为不销毁
    17         cc.game.addPersistRootNode(this.node);
    18     }
    19 }

    2.调用地方 
    新建一个 Test.js

     1 // 开头必须require 引入单例 GameManager
     2 var GameManager = require("GameManager");
     3 cc.Class({
     4     extends: cc.Component,
     5 
     6     start () {
     7        // 直接调用
     8        // 输出: GameManager name : GameManager<GameManager>,age = 20
     9        cc.warn("GameManager name : "+  GameManager._instance.name 
    10                +",age = " + GameManager._instance.age );  
    11     },
    12 
    13 });

    特别强调

    • 单例组件类,开头必须要有变量引用 ,如var GameManager = cc.Class({...})
    • 调用单例组件的类,开头必须 require 引入


    转载: https://blog.csdn.net/leovnay/article/details/79272977

  • 相关阅读:
    Servlet到底是单例还是多例你了解吗?
    Idea的一些调试技巧及设置todo
    Android如何使用so文件和Android studio中导入so
    Android 自定义控件之app标题栏的封装
    Android 动态添加删除ExpandableListView的item的例子
    Android 利用ListView制作带竖线的多彩表格
    Android EditText 改变边框颜色
    Android 使用Okhttp/Retrofit持久化cookie的简便方式
    Android 一个漂亮的Android Spinner
    Android 带清除功能的输入框控件EditText
  • 原文地址:https://www.cnblogs.com/porter/p/10032244.html
Copyright © 2020-2023  润新知