0

私は頻繁に呼び出す[[CCDirector sharedDirector] winSize]ので、winSize() の行に沿ってマクロを作成したいと思っています。これを Cocos2D のライブラリに入れるのに適した場所はどこでしょうか? 最初は、Support>CGPointExtension.h が機能する可能性があると考えていましたが、その場所では ccdirector が定義されていません。何か案は?

4

2 に答える 2

3

これはどう?

#define WINSIZE [[CCDirector sharedDirector] winSize];

個人的には、これにはマクロを使用しません。より良い代替手段は、winSize が頻繁に必要なクラスに ivar または static var を追加することです。

于 2013-03-29T17:45:24.250 に答える
0

私は通常、これらの定義をプロジェクトごとに .m/.h に入れます。たとえば、.h

extern float  kScreenWidth;                  // design width of the app (in points)
extern float  kScreenHeight;                 // design height of the app (in points)
extern CGSize kBattleMidPoint;
extern float  kLongTouch;
extern float  kTileWidth;
extern float  kTileHeight;

.m で

float  kScreenWidth  = 480.0;
float  kScreenHeight = 320.0;
CGSize kBattleMidPoint;
float  kLongTouch    = .65f;
float  kTileWidth    = 40.;
float  kTileHeight   = 40.;

また、.m セッターのどこかで上記のデフォルトをオーバーライドします。CCDirector が初期化された直後に、一度呼び出します。

+ (void)setScreenWidth:(float)screenWidth {

    kScreenWidth = screenWidth;
    if (screenWidth >= 568.0) {
        kDeviceType = deviceTypeIpodTall;
    }
}

+ (void)setScreenHeight:(float)screenHeight {

    kScreenHeight = screenHeight;
}   

+ (void)setBattleMidPoint:(CGSize)midPoint {

    kBattleMidPoint = midPoint;
}

+ (void)setTileWidth:(float)tileWidth {

    kTileWidth = tileWidth;
}

+ (void)setTileHeight:(float)tileHeight {

    kTileHeight = tileHeight;
}

最後に、プリコンパイル済みヘッダーに .h を含めます。私は、cocos2d コード ベースを変更/拡張することを (可能な限りのコストをかけて) 回避する傾向があり、最小限の労力で更新する権利を留保します :)。

于 2013-03-29T17:07:42.873 に答える