c++单例 通过cocos2dx重现c++单例—— c++语法复习

我这里通过实现一个类似iOS的HUD的类,来例子说明用c++怎么创建一个单例,直接上代码

头文件:

#ifndef HintTextHUD_hpp

#define HintTextHUD_hpp


#include <stdio.h>

#include "ui/CocosGUI.h"


using namespace std;

using namespace cocos2d;


/// 提示信息

class HintTextHUD:public Layer

{

private:

    Label* _messageLabel;           //文字提示label

    HintTextHUD();

    ~HintTextHUD();

    static HintTextHUD * __instance;

public:

    static HintTextHUD* getInstance();

    CREATE_FUNC(HintTextHUD);

    bool createLayer(const string& _message);

    void removeFromParent(float a);

    void initOptions(const string& _message);

    inline virtual Label* getMessageLabel(){return _messageLabel;};

    

};


#endif /* HintTextHUD_hpp */


实现文件:

#include "HintTextHUD.hpp"


using namespace experimental;


CC_DLL;


HintTextHUD* HintTextHUD::__instance = NULL;

HintTextHUD* HintTextHUD::getInstance() {

    if (__instance == NULL) {

        __instance = new HintTextHUD();

    }

    

    return __instance;

}


HintTextHUD::HintTextHUD(){}


HintTextHUD::~HintTextHUD(){}


bool HintTextHUD::createLayer(const string &_message){

    

    if (!Layer::init()) {

        return false;

    }

    this->setColor(Color3B(192,192,192));

    this->setContentSize(Size::Size(1,1));

    this->setAnchorPoint(Vec2(0,0));

    this->initOptions(_message);

    this->schedule(schedule_selector(HintTextHUD::removeFromParent),2.0f);

    return true;

}


void HintTextHUD::initOptions(const string &_message){

    _messageLabel = Label::create();

    _messageLabel->setString(_message);

    _messageLabel->setSystemFontSize(35);

    _messageLabel->setHorizontalAlignment(TextHAlignment::CENTER);

    _messageLabel->setColor(Color3B(0,0,0));

    addChild(_messageLabel,1);

    Size contentSize = Director::getInstance()->getVisibleSize();

    _messageLabel->setPosition(Vec2(contentSize.width/2, contentSize.height/2));

}


void HintTextHUD::removeFromParent(float a){

    removeFromParentAndCleanup(true);

}

看完代码意思大概懂了吧?和OC 差不多,需要一个static变量和类函数,然后就是要把构造函数和析构函数私有化。

看看怎么用:

auto _hud = HintTextHUD::getInstance();

        _hud->createLayer("账号或密码错误!");

        this->addChild(_hud, 2);

OK,大概就是这样


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值