Я на самом деле не знаю Cocos2d, но, исходя из краткого прочтения, я думаю, вы спустились GameObject
по какому-либо окольному маршруту с CCNode
? В этом случае поле tag
является целым числом. Вы не можете сохранить несколько значений, но вы можете использовать его как битовое поле. Например:
#define kTagValueBottle 0x0001
#define kTagValueBroken 0x0002
#define kTagValueAnotherAttribute 0x0004
#define kTagValueAThirdAttribute 0x0008
#define kTagValueAFourthAttribute 0x0010
/* etc */
Затем вы назначаете тип как, например:
object.tag = kTagValueBottle | kTagValueBroken;
Таким образом, он вычисляет побитовое ИЛИ kTagValueBottle
и kTagValueBroken
и сохраняет его как новый тег. Вы также можете добавить свойство в любое время, используя побитовое ИЛИ:
object.tag |= kTagValueBroken;
Или удалить с помощью побитового И с обратной маской:
object.tag &= ~kTagValueBroken;
Вы бы заменили свои тесты прямого сравнения на тестирование отдельных битов с помощью побитового И:
// if ([tempObject tag] == kBottleTagValue) // old test
if ([tempObject tag] & kBottleTagValue) // new test
Это такая же система, которую Apple использует для таких свойств, как autoresizingFlags
на UIView
.
Если вы можете справиться с чтением примера кода на PHP, а не с Objective-C, эта показалась самой полезной статьей, которую я мог быстро найти через Google, хотя и по общему признанию из-за тонких выборок.