0

我正在用 Cocos2D for iPhone 创建一个游戏。以下表达式出现在代码周围的几个地方:

CGFloat screenCenter = [CCDirector sharedDirector].winSize.width / 2.0;

我想把它放在一个常量文件或类似文件中,这样表达式就不会在所有地方重复。一个想法是把

#define SCREEN_CENTER [CCDirector sharedDirector].winSize.width / 2.0

Constants.h根据需要导入。然而,我的印象是,在 Objective-C 中以static const某种能力使用更好的风格/实践。

我怎样才能screenCenter在一个地方声明,static const然后根据需要在整个代码中重新使用它?

这样做的一个潜在好处是只进行一次除法,而不是每次计算屏幕中心。

4

1 回答 1

3

这不是编译时表达式,因此您不能将其设为static const.

如果要保留#define,则需要将括号包裹起来,否则可能会引入细微的错误。

您可能还需要考虑使用内联函数

inline CGFloat screenCenter() {
    return [CCDirector sharedDirector].winSize.width / 2.0f;
}

或者你可以直接把它挂起来CCDirector。假设您不拥有该类,则可以使用类别

@interface CCDirector (FunkyStuff)
- (CGFloat)screenCenter;
@end

@implementation CCDirector (FunkyStuff)
- (CGFloat)screenCenter {
    return self.winSize.width / 2.0f;
}
@end

...
x = [[CCDirector sharedDirector] screenCenter];

为了增加方便,您甚至可以将其变成类方法。

于 2012-10-12T19:03:44.360 回答