zoukankan      html  css  js  c++  java
  • Cocos Creator_继承组件单例

    前言

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

    普通单例_饿汉模式

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

     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 引入


  • 相关阅读:
    手机各种JS语法,随时更新
    ionic上拉加载-下拉刷新
    JS获取浏览器信息及屏幕分辨率
    jQuery元素的显示、隐藏及动画
    jQuery原型
    表单序列化为对象
    html里的ajax数据传输
    面试技巧-互联网行业通吃
    jquery表单验证validate
    Javascript缓动动画原理
  • 原文地址:https://www.cnblogs.com/luorende/p/10694714.html
Copyright © 2011-2022 走看看