我正在学习cocos2d [在iPhone上为目标C打开gl包装],现在玩精灵已经在一个例子中找到了这个,
enum {
easySprite = 0x0000000a,
mediumSprite = 0x0000000b,
hardSprite = 0x0000000c,
backButton = 0x0000000d,
magneticSprite = 0x0000000e,
magneticSprite2 = 0x0000000f
};
...
-(id) init
{...
/second sprite
TSprite *med = [TSprite spriteWithFile:@"butonB.png"]; //blue
[med SetCanTrack:YES];
[self addChild: med z:1 tag:mediumSprite];
med.position=ccp(299,230);
[TSprite track:med];
因此枚举中定义的变量用于创建的精灵对象的标记名称
但我不明白
因为我在obj C和C中知道这个枚举
typedef enum {
JPG,
PNG,
GIF,
PVR
} kImageType;
谢谢!
答案 0 :(得分:3)
通常,在创建枚举时,您希望将其用作类型(变量,方法参数等)。
在这种情况下,它只是一种如何声明整数常量的方法。由于不希望将枚举用作类型,因此名称不是必需的。
编辑: 当整数是二进制掩码时,通常使用十六进制数。你不会看到任何像+, - ,*,/这样的数字运算符,你会看到按位运算符(!,&,|,^)。
十六进制数中的每个数字代表4位。整数是一个32位整数,在这种情况下用十六进制写,你说你只使用最后四位,其他位可以用于别的东西。从十进制数字来看,这并不明显。
答案 1 :(得分:2)
枚举是自动分配的值,从0开始递增,但您可以指定自己的值。
如果您没有指定任何值,则它们将从0开始,如:
typedef enum {
JPG,
PNG,
GIF,
PVR
} kImageType;
但你可以为它们分配值:
typedef enum {
JPG = 0,
PNG = 1,
GIF = 2,
PVR = 3
} kImageType;
甚至
typedef enum {
JPG = 100,
PNG = 0x01,
GIF = 100,
PVR = 0xff
} kImageType;
你想要的任何东西,重复的价值也是可以的。
我不确定为什么给他们这些特定的价值,但他们可能有一些与使用有关的意义。
答案 2 :(得分:1)
好吧,你似乎正在解决一个可怕的例子。 :)
至少就枚举而言。任何人都可以定义枚举条目的实际值,但是使用十六进制数字没有任何好处,特别是使用to f(10到15)启动十六进制数字是没有意义的。该示例也适用于此枚举:
enum {
easySprite = 10,
mediumSprite,
hardSprite,
backButton,
magneticSprite,
magneticSprite2
};
除非将枚举从值10开始,否则它可能会在没有指定任何具体值的情况下工作。