0

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

CCDirecor.h:

-(ccTime)getCCFrameRate;

CCDirecor.m:

-(ccTime)getCCFrameRate {
    return frameRate_;
}

...所以我现在可以像这样得到值:

ccTime frameRateOutput = [[MyDirector sharedDirector] getCCFrameRate];

这可行,但我不想“破解” Cocos2D 框架代码。我已经尝试子类化 CCDirector,但遇到了一些问题。感谢任何关于在不弄乱框架代码的情况下获得此“framerate_”ivar 的最佳方法的建议。谢谢

4

2 回答 2

2

您可以像这样获得任何对象的任何 ivar:

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

但是,在我看来,这比扩展框架更像是一种 hack。

于 2012-12-15T08:26:49.370 回答
1

如果您绝对想避免修改 CCDirector 代码,您可以在自定义类中重现相同的代码。

尽管后者绝对没问题,但如果您升级到更新的 cocos2d 版本,您只会遇到问题。在这种情况下,只需重新应用您的更改,因为它们是如此之少。

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

于 2012-12-15T14:21:12.643 回答