共享我写的全局定时器类

在网上搜索了一些全局定时器的源代码,都是用一个单例对像,个人觉得不好用,一般一个工程中可能用到多个定时器,为什么用单例对像呢?那不是【为了使用怪异技术】而【使用怪异技术】吗?连C++最基本的多实例化不用,不是【脱裤放屁】吗?(我是这样想的,请用砖指正)

自己实现了一个,上代码:

GlobalTimer.h

#ifndef H_GLOBAL_TIMER_H
#define H_GLOBAL_TIMER_H

#include "cocos2d.h"

typedef void (*GlobalTimerUserCallback)(void*, void*, float);  
 //Example: void callback(void* timer, void * param, float delta); 

#define REPEAT_FOREVER 0xFFFFFFFE

class CGlobalTimer: public cocos2d::Ref
{
public:
    CGlobalTimer();
    ~CGlobalTimer();
    virtual bool init();
    void Open(GlobalTimerUserCallback fun, void* param, float interval=1.0f, float delay=0.0f, unsigned int repeat=REPEAT_FOREVER, bool paused=false);
    void Close(); 
    void Pause(); 
    void Resume(); 
private:
    void CallbackFun(float delta); 
    GlobalTimerUserCallback UserCallbackFun;
    void * UserParam;
    CREATE_FUNC(CGlobalTimer);
};
#endif

```



GlobalTimer.cpp
#include "GlobalTimer.h"

USING_NS_CC;

CGlobalTimer::CGlobalTimer()
{
    UserCallbackFun=NULL;
    UserParam=NULL;
}

CGlobalTimer::~CGlobalTimer()
{
    Close();
}

bool CGlobalTimer::init()
{
    return true;
}

void CGlobalTimer::Open(GlobalTimerUserCallback fun, void* param, float interval, float delay, unsigned int repeat, bool paused)
{
    if(fun==NULL){
        return;
    }

    UserCallbackFun=fun;
    UserParam=param;
    CCDirector::sharedDirector()->getScheduler()->scheduleSelector(schedule_selector(CGlobalTimer::CallbackFun), this, interval, repeat, delay, paused);
}

void CGlobalTimer::Close()
{
    CCDirector::sharedDirector()->getScheduler()->unscheduleSelector(schedule_selector(CGlobalTimer::CallbackFun), this);
}

void CGlobalTimer::Pause()
{
    CCDirector::sharedDirector()->getScheduler()->pauseTarget(this);
}

void CGlobalTimer::Resume()
{
    CCDirector::sharedDirector()->getScheduler()->resumeTarget(this);
}

void CGlobalTimer::CallbackFun(float delta)
{
    if(UserCallbackFun){
        UserCallbackFun(this, UserParam, delta);
    }
}

```



Usage:
#include "GlobalTimer.h"
USING_NS_CC;

CGlobalTimer GTimer1;
CGlobalTimer GTimer2;

void OnTimer1(void* timer, void* param, float delta)
{
    CCLog("Timer1");
}

void OnTimer2(void* timer, void* param, float delta)
{
    CCLog("Timer2");
}

bool AppDelegate::applicationDidFinishLaunching() {
    // initialize director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    if(!glview) {
        glview = GLView::create("My Game");
        director->setOpenGLView(glview);
    }

    // turn on display FPS
    director->setDisplayStats(true);

    // set FPS. the default value is 1.0/60 if you don't call this
    director->setAnimationInterval(1.0 / 60);

    // create a scene. it's an autorelease object
    auto scene = HelloWorld::createScene();

    GTimer1.Open(OnTimer1, NULL, 2.0f);
    GTimer2.Open(OnTimer2, NULL, 3.0f);

    // run
    director->runWithScene(scene);

    return true;
}

```



看完拍砖是一种美德
看完拍砖是一种美德
看完拍砖是一种美德

Day Day Up

没人反驳你的观点吗

【脱裤放屁】:11: