c,obj c enum没有标签或标识符

我正在学习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]; 

因此枚举中定义的变量用于创建的精灵对象的标记名称,

但我不明白

  1. 为什么要将hexa中的值赋给要使用的标记
  2. 没有标签的枚举

因为我在obj C和C中知道这个枚举

  typedef enum { JPG, PNG, GIF, PVR } kImageType; 

谢谢!

枚举会自动分配值,从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; 

你想要的任何东西,重复的价值也是可以的。

我不确定为什么给他们这些具体的价值,但他们可能有一些与使用有关的意义。

通常,在创建枚举时,您希望将其用作类型(变量,方法参数等)。

在这种情况下,它只是一种如何声明整数常量的方法。 由于不想将枚举用作类型,因此名称不是必需的。

编辑:当整数是二进制掩码时,通常使用hex数字。 你不会看到像+, – ,*,/这样的数字运算符,你会看到按位运算符(!,&,|,^)。

hex数中的每个数字代表4位。 整数是一个32位整数,在这种情况下用hex写,你说你只使用最后四位而其他位可以用于其他东西。 从十进制数字来看,这不是很明显。

好吧,你似乎正在解决一个可怕的例子。 🙂

至少就枚举而言。 任何人都可以定义枚举条目的实际值,但是使用hex数字没有任何好处,特别是使用to f(10到15)启动hex数字是没有意义的。 该示例也适用于此枚举:

 enum { easySprite = 10, mediumSprite, hardSprite, backButton, magneticSprite, magneticSprite2 }; 

除非在枚举开始时使用值10,否则它可能会在没有指定任何具体值的情况下工作。