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;

ただし、私の意見では、これはフレームワークを拡張するというよりもハックです。

于 2012-12-15T08:26:49.370 に答える
1

CCDirector コードの変更を絶対に避けたい場合は、同じコードをカスタム クラスで再現できます。

後者はまったく問題ありませんが、新しい cocos2d バージョンにアップグレードした場合にのみ問題が発生します。その場合は、変更が最小限であるため、変更を再適用するだけです。

CCDirector はシングルトンであり、プラットフォーム固有のサブクラスである CCDirectorIOS および CCDirectorMac が既に存在するため、CCDirector を簡単にサブクラス化することはできません。

于 2012-12-15T14:21:12.643 に答える