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];
因此枚举中定义的变量用于创建的精灵对象的标记名称,
但我不明白
- 为什么要将hexa中的值赋给要使用的标记
- 没有标签的枚举
因为我在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,否则它可能会在没有指定任何具体值的情况下工作。