cocos2dx Action 的学习Cocos2d-x v3.3 ActionManager详解

cocos2dx Action 的学习Cocos2d-x v3.3 ActionManager详解,第1张

概述  Cocos2d-x v3.3 ActionManager详解 http://cn.cocos2d-x.org/tutorial/show?id=2755 DelayTime* delayTime = DelayTime::create(animate->getDuration()/2);    CallFunc* callFunc1 = CallFunc::create(CC_CALLBACK

Cocos2d-x v3.3 ActionManager详解 http://cn.cocos2d-x.org/tutorial/show?ID=2755


DelayTime* delayTime =DelayTime::create(animate->getDuration()/2);

CallFunc* callFunc1 =CallFunc::create(CC_CALLBACK_0(figure::attacking,@H_502_53@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;}#endifSequence* 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);}
总结

以上是内存溢出为你收集整理的cocos2dx Action 的学习Cocos2d-x v3.3 ActionManager详解全部内容,希望文章能够帮你解决cocos2dx Action 的学习Cocos2d-x v3.3 ActionManager详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1054833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存