学习编程也有段时间,参加项目边学习。最近使用单例简单写个弹框,并且使用委托将其实现方法,记录下。
myFunction.cpp myFunction.h myFunctionDelegate.h
单例:就是全局只有一个,一般是静态的。(自己的理解)
先写个静态的实现方法:用来初始化myfFunction-> static void showMyFunction(myFunctionDelegate _delegate , CCString* myString,...);这里的showMyFunction接受两个参数:第一个以后用到的delegate ,第二个是传入一个ccString ,第三个是可以传入多个参数。
static MyFunction* _my; //这个就是全局静态只有一份
void MyFunction::showMyFunction(myFunctionDelegate _delegate , CCString* myString,...)
{
if(!_my) //检查是否已经存在,不存在就创建
{
_my = new MyFunction();
_my->init(); //调用父类的Layer::init
_my->retain();//不要忘记
}
//就是对传入数据处理参考CCArray里面传多个参数写法:我理解就是把传入的数据放到一个数组里面保存
va_list args;
va_start(args ,cBtn);
CCArray* pArray = CCArray::create();
if(pArray && cBtn)
{
pArray->addObject(cBtn);
CCObject *i = va_arg(args,CCObject*);
while(i)
{
pArray->addObject(i);
i = va_arg(args , CCObject*);
}
}else
{
CC_SAFE_DELETE(pArray);
}
}
va_end(args);
if(_my->_state == 0)
{
_my->show(delegate,myString,pArray);
}else
{
//关闭再从新打开,之前要保存好数据
if(_my->_string) _my->string->release();
_my->_string = myString;
if(_my->_myArray) _my->_myArray->release();
_my->myArray = CCArray::createWithArray(pArray);
_myArray->retain(); //记得在以后销毁时候release
_my->close(delegate , _String,pArray); //做就是移除所有再重新打开
// _state = 0;
//_my->removeAllChildren(); _my->removeFromParentAndCleanup(false);
//_my->show(delegate,pArray,_string);
}
委托:有点像obj-C里面的
1. myDelegate.h
写一个class 名字myDelegate
里面使用接口:virtual void onClick() = 0;
2. myFunction.h -》引入1的头文件-》定义一个delegate : myDelegate _delegate;
3.传入的deleagte 付给_delegate _delegate = delegate; //重要。。。。。
4.Item响应点击事件(CCMenuItemSprite) _delegate ->onClick();
5.直接在想使用myFunction这个类中使用 myFunction::showMyFunction(this,///); 6.onClick()方法实现就再你想用的类中写具体。记得要要继承myDelegate