Ios Cocos2D 2.x-从CCDirector获取帧率值

Ios Cocos2D 2.x-从CCDirector获取帧率值,ios,cocos2d-iphone,Ios,Cocos2d Iphone,我想使用CCDirector类中“showStats”方法计算的ivar“framerate”值。目前,我已经在CCDirector.m/h文件中添加了一个方法来访问该值,例如 CCDirecor.h: -(ccTime)getCCFrameRate; CCDirecor.m: -(ccTime)getCCFrameRate { return frameRate_; } …所以我现在可以得到如下值: ccTime frameRateOutput = [[MyDirector shar

我想使用CCDirector类中“showStats”方法计算的ivar“framerate”值。目前,我已经在CCDirector.m/h文件中添加了一个方法来访问该值,例如

CCDirecor.h:

-(ccTime)getCCFrameRate;
CCDirecor.m:

-(ccTime)getCCFrameRate {
    return frameRate_;
}
…所以我现在可以得到如下值:

ccTime frameRateOutput = [[MyDirector sharedDirector] getCCFrameRate];

这是可行的,但我不想“破解”Cocos2D框架代码。我曾尝试将CCDirector子类化,但遇到了一些问题。感谢您对在不干扰框架代码的情况下获得此“帧率”ivar的最佳方法的任何建议。谢谢

您可以获得任何对象的任何ivar,如下所示:

Ivar iv = object_getInstanceVariable(obj, "_framerate");
void *ivp = (char *)obj + ivar_getOffset(iv);
TYPE framerate = *(TYPE *)ivp;

然而,在我看来,这比扩展框架更像是一种黑客行为。

您可以获得任何对象的任何ivar,如下所示:

Ivar iv = object_getInstanceVariable(obj, "_framerate");
void *ivp = (char *)obj + ivar_getOffset(iv);
TYPE framerate = *(TYPE *)ivp;

然而,在我看来,这比扩展框架更像是一种黑客行为。

如果您绝对不想修改CCDirector代码,您可以在自定义类中复制相同的代码

虽然后者是绝对可以的,但只有升级到更新的cocos2d版本,您才会遇到问题。在这种情况下,只需重新应用您的更改,因为它们非常小


您不能轻易地将CCDirector子类化,因为它是一个单例,并且已经有特定于平台的子类CCDirectorIOS和CCDirectorMac。

如果您绝对不想修改CCDirector代码,您可以在自定义类中复制相同的代码

虽然后者是绝对可以的,但只有升级到更新的cocos2d版本,您才会遇到问题。在这种情况下,只需重新应用您的更改,因为它们非常小


您不能轻易地将CCDirector子类化,因为它是一个单例,并且已经有了特定于平台的子类CCDirectorIOS和CCDirectorMac。

谢谢,这很方便了解。。。但我也同意这有点像黑客。我想我会把我所做的编辑工作留给我的主管。如果我必须更新框架,我想如果我忘记重新应用自定义创建的方法,我的自定义创建方法至少会出现可跟踪错误。例如,在CCDirector上找不到方法“getCCFrameRate”,等等@StaticFrient,或者您可以使用版本控制。。。使用git,真的。谢谢,这很方便知道。。。但我也同意这有点像黑客。我想我会把我所做的编辑工作留给我的主管。如果我必须更新框架,我想如果我忘记重新应用自定义创建的方法,我的自定义创建方法至少会出现可跟踪错误。例如,在CCDirector上找不到方法“getCCFrameRate”,等等@StaticFrient,或者您可以使用版本控制。。。使用git,真的。谢谢,正如我在评论H2CO3时提到的。我想我会把我的编辑工作交给CCDirector。很高兴再次得到保证,这种方法不可能导致任何不可预见的问题。谢谢,正如我在评论H2CO3时提到的。我想我会把我的编辑工作交给CCDirector。不过,令人欣慰的是,这种方法不太可能导致任何不可预见的问题。