HASH_FIND_PTR
HASH_ADD_PTR
calloc
原型
头文件
功能
返回值
说明
名称解释
DelayTime* delayTime =DelayTime::create(animate->getDuration()/2);
CallFunc* callFunc1 =CallFunc::create(CC_CALLBACK_0(Figure::attacking,this));
DelayTime 和CallFunc 都是FiniteTimeAction的子类
Sequence* sequence =Sequence::create(delayTime,callFunc1,delayTime,callFunc2,NULL);
例如这个例子,它创建的时候由于参数是不定的
先
va_start(params,action1);
再
now = va_arg(args,FiniteTimeAction*);
最后
va_end(params);
解决了 不定参数传递的问题
createWithVariableList
解释了如何取得参数的过程。
在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义: #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) //第一个可选参数地址 #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //下一个参数地址 #define va_end(ap) ( ap = (va_list)0 ) // 将指针置为无效 如果对以上几个宏定义不理解,可以略过,接着看后面的内容. 在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,一些黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的. 总之,函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段. 堆栈中,各个函数的分布情况是倒序的.即最后一个参数在列表中地址最高部分,第一个参数在列表地址的最低部分.参数在堆栈中的分布情况如下: 最后一个参数 倒数第二个参数 ... 第一个参数 函数返回地址 函数代码段
Sequence* Sequence::create(FiniteTimeAction *action1,...) { va_list params; va_start(params,action1); Sequence *ret = Sequence::createWithVariableList(action1,params); va_end(params); return ret; } #endif Sequence* Sequence::createWithVariableList(FiniteTimeAction *action1,va_list args) { FiniteTimeAction *now; FiniteTimeAction *prev = action1; bool bOneAction = true; while (action1) { now = va_arg(args,FiniteTimeAction*); if (now) { prev = createWithTwoActions(prev,now); bOneAction = false; } else { // If only one action is added to Sequence,make up a Sequence by adding a simplest finite time action. if (bOneAction) { prev = createWithTwoActions(prev,ExtraAction::create()); } break; } } return ((Sequence*)prev); }
-------------------------------
xcode 创建了 .cpp 文件之后 .h 文件才能include “xxx.h” 点击“xxx.h”才能跳转
事件2.x 替换为3.x 版本
// CCTouchDispatcher* touchDispatcher = CCDirector::sharedDirector()->getTouchDispatcher();
// touchDispatcher->addTargetedDelegate(this,kCCMenuHandlerPriority-1000,true);
// Register Touch Event
auto listener =EventListenerTouchOneByOne::create();
listener->setSwallowTouches(true);
listener->onTouchBegan =CC_CALLBACK_2(GameLoading::onTouchBegan,this);
listener->onTouchMoved =CC_CALLBACK_2(Paddle::onTouchMoved,this);
listener->onTouchEnded =CC_CALLBACK_2(Paddle::onTouchEnded,this);
_eventDispatcher->addEventListenerWithSceneGraPHPriority(listener,this);
-------------------------------
CCLabelTTF 的替换
// //加载信息label
// CCString *pStrLoading = dynamic_cast<CCString*>(pDicLang->objectForKey("loading_now"));
// CCLabelTTF * pLabelLoading = CCLabelTTF::create(pStrLoading->m_sString.c_str(),"Arial",10);
// CC_BREAK_IF(pLabelLoading==NULL);
// pLabelLoading->setPosition(pProLoadRec->getPosition());
// addChild(pLabelLoading,enZOrderMid+2,enTagLabel);
ValueMap dict =FileUtils::getInstance()->getValueMapFromFile("ui_xml/loading_xml.xml");
std::string pStrLoading = dict.at("loading_now").asString();
// LabelTTF * pLabelLoading = LabelTTF::create(pStrLoading,10);
Label * pLabelLoading =Label::createWithSystemFont(pStrLoading,"Arial",10);
// Label * pLabelLoading = Label::createWithTTF(pStrLoading,10);
CC_BREAK_IF(pLabelLoading==NULL);
pLabelLoading->setPosition(pProLoadRec->getPosition());
addChild(pLabelLoading,enZOrderMid+2,enTagLabel);
------------------------
#include "extensions/cocos-ext.h"
apidjson::Value json)
#include "cocos2d.h"
#include "extensions/cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;
-------------------------------------------------------------
CC_SYNTHESIZE_READONLY(string,m_propName,PropName);
------------------
// LabelTTF* title = LabelTTF::create(m_title,"Helvetica-Bold",22);
Label * title =Label::createWithSystemFont(m_title,"Helvetica-Bold",22);
---------------------
std::function<void()> callfunc;
std::function<void()> &callfunc; 错误
CallFunc* moveByEnd =CallFunc::create(this,callfunc_selector(Monomer::moveByEnd));
CallFunc* callFunc2 =CallFunc::create(CC_CALLBACK_0(Monomer::unscheduleUpdateVertexZ,this));
--------------------
// CC_SYNTHESIZE_RETAIN(cocos2d::CCString*,m_fileName,NpcFileName);
CC_SYNTHESIZE(std::string,m_fileName,NpcFileName);
--------------------
int val1 =512,val2 =1024;
stringstream ss;
ss<<"texture_npc/npc_"<<val1 //“val1: "此处有空格,字符串流是通过空格判断一个字符串的结束
<<"_1_"<<val2<<".png"<<endl;
cout<<ss.str();
val1 =222,val2 =333;
ss.str("");
ss<<"texture_npc/npc_"<<val1 //“val1: "此处有空格,字符串流是通过空格判断一个字符串的结束
<<"_1_"<<val2<<".png"<<endl;
string sx= ss.str()+"fff";
cout<<sx;
// 在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要先继续清空,而清空很容易想到是clear方法,而在stringstream中这个方法实际上是清空stringstream的状态(比如出错等),真正清空内容需要使用.str(“”)方法。
----------------
方法一:
- std::map<std::string,std::string>mapTest;
- boolTestVal(conststd::string&val);
- ......
- std::map<std::string,std::string>::iteratorit=mapTest.begin();
- while(it!=mapTest.end())
- {
- if(TestVal(it->second))
- it=mapTest.erase(it);
- }
- else
- it++;
- }
- ...........
方法二:
copy