如题。C#的单例模板我会,这个我不会。
export default class SampleClass {
private static _instance: SampleClass = null;
public static get Instance() {
return SampleClass._instance || (SampleClass._instance = new SampleClass());
}
}
这是我写的,但是在另一个脚本中调用却调不出SetAcitve();
//这个脚本用于UI的总管理
@ccclass(“UIMgr”)
export class UIMgr extends Component {
//至少有4个一级界面,3个二级界面
//这里控制UI的显示与隐藏
//所有UI窗体都继承自这个脚本
private static instance: UIMgr = new UIMgr();
//限制产生多个对象
private constructor() {
super();
}
/**
* 获得实例对象
*/
public static Instance(): UIMgr {
return this.instance;
}
/**
* 设置UI的显示与隐藏
*/
public SetAcitve() {
if (this.node.active = false) {
this.node.active = true;
}
}
}
在这个GameOver()中的 UIMgr.Instance.说明我调不到。
import{ UIMgr } from “./UIMgr”;
//这个脚本负责游戏逻辑
@ccclass(“GameMgr”)
export class GameMgr extends Component {
//游戏初始化、场景跳转
//游戏结算等
//使用中介者模式
@property
public isCross:boolean;
@property
public Score=0;//得分
/**
* 计算得分
*/
public CalScore() {
//是否穿过平台
if (this.isCross = true) {
this.Score += 1;
}
}
/**
* 游戏结束
*/
public GameOver() {
//结算奖励
//返回主界面
UIMgr.Instance.
console.log("游戏结束");
}
}
大佬帮忙看一下我为什么调不到单例。
你的Instance()是个方法,调用的时候当然要加括号,另外获取实例对象的时候不应该是return this.instance而应该是UIMgr.instance
您给我的好像不是单例模板(泛型单例),我参照官方写了一个,但是NetMgr.Instance().; //这里无法调用到NetMgr.ts中的方法Hello()。这是为什么?
代码如下:
import { _decorator, Component, Node } from “cc”;
const { ccclass, property } = _decorator;
@ccclass(“SingletonPattern”)
export default class SingletonPattern {
private static instance:any=null;
public static Instance(type:{new ():T}){
if(this.instance==null){
this.instance=new type();
}
return this.instance;
}
}
继承自单例模板:
import { _decorator, Component, Node } from “cc”;
import SingletonPattern from “./Help/SingletonPattern”;
const { ccclass, property } = _decorator;
//这个脚本用于对网络服务的管理
@ccclass(“NetMgr”)
export class NetMgr extends SingletonPattern< NetMgr> {
//可能会单独把微信开放域相关的代码放在另一个脚本
//而这个脚本则是对这个进行管理
public Log()
{
console.log("单例模板成功使用");
}
}
调用单例子类的方法:
import { _decorator, Component, Node } from “cc”;
const { ccclass, property } = _decorator;
import{ UIMgr } from “./UIMgr”;
import{NetMgr} from “./NetMgr”;
//这个脚本负责游戏逻辑
@ccclass(“GameMgr”)
export class GameMgr extends Component {
//游戏初始化、场景跳转
//游戏结算等
//使用中介者模式
@property
public isCross:boolean;
@property
public Score=0;//得分
/**
* 计算得分
*/
public CalScore() {
//是否穿过平台
if (this.isCross = true) {
this.Score += 1;
}
}
/**
* 游戏结束
*/
public GameOver() {
//结算奖励
//返回主界面
NetMgr.Instance().; //这里无法调用。
UIMgr.Instance().SetAcitve();
console.log("游戏结束");
}
}
大佬,还有个问题,能解答一下吗?就是单例模板/泛型单例的问题。
官方单例模板?你哪儿找的?如果你自己真的有需求用到高级的ts特性,建议你还是完整的看看ts语法。否则后面估计会遇到更多问题
export class Singleton{
private static instance: any = null;
public static Instance(c: { new(): T }): T {
if (this.instance == null) {
this.instance = new c();
}
return this.instance;
}
public Update(dt: number) {
}
}
只能帮到你这
cocos论坛里,有个帖子叫泛型单例。
你这个就直接报错了。
你就不会改一下加个???
我这么写不行,我的子类不是继承自Component了。
这是解决了吗。。
你要明白单例是什么,确保全局只有一个。这是写的方法又很多,切换场景后,你还要确定单例只有一个这个要加一个if判断,我只是写了一个最最最简单的给你,高端的又怕你看不懂。。。其实就跟C#转过来一样,又空你去看下ts 的语法,其实出入不大的,只要你自己可以看的明白
你觉得你应该把那些语法弄懂一下