Значения CATEGORY в шестнадцатеричном формате неверны.В настоящее время значения ваших КАТЕГОРИЙ:
public static final short CATEGORY_ARROW = 0x0001; // 1 in binary
public static final short CATEGORY_MONSTER = 0x0002; // 10 in binary
public static final short CATEGORY_SCENERY = 0x0004; // 100 in binary
public static final short CATEGORY_GRAVEYARD = 0x0008; // 1000 in binary
public static final short CATEGORY_PENGUIN = 0X0016; // 10110 in binary
public static final short CATEGORY_FISH = 0x0032; // 110010 in binary
public static final short CATEGORY_MONSTER_MOUTH = 0x0064; // 1100100 in binary
Итак MASK_MONSTER = CATEGORY_MONSTER | CATEGORY_SCENERY
= 110 в двоичном
И CATEGORY_MONSTER_MOUTH
= 1100100 в двоичном
Наконец, MASK_MONSTER | CATEGORY_MONSTER_MOUTH
будет соответствовать, потому чтоэто приводит к 100
Ваша проблема в том, что ваш подсчет в Hex неверен, вы должны написать:
public static final short CATEGORY_ARROW = 0x0001; // 1 in binary
public static final short CATEGORY_MONSTER = 0x0002; // 10 in binary
public static final short CATEGORY_SCENERY = 0x0004; // 100 in binary
public static final short CATEGORY_GRAVEYARD = 0x0008; // 1000 in binary
public static final short CATEGORY_PENGUIN = 0X0010; // 10000 in binary
public static final short CATEGORY_FISH = 0x0020; // 100000 in binary
public static final short CATEGORY_MONSTER_MOUTH = 0x0040; // 1000000 in binary
После этого придет 0x80, 0x100,0x200, 0x400, 0x800, 0x1000 и т. Д.