Cocos2d iphone Cocos2d Box2d-将通用用户数据分配给bodyDef

Cocos2d iphone Cocos2d Box2d-将通用用户数据分配给bodyDef,cocos2d-iphone,box2d,box2d-iphone,Cocos2d Iphone,Box2d,Box2d Iphone,我看到的分配userData的大多数示例如下所示: CCSprite *sprite = [CCSprite spriteWithFile:@"whatever.png" rect:CGRectMake(0, 0, screenSize.width, screenSize.height)]; sprite.tag = kWallTag; [self addChild:sprite]; b2BodyDef groundBodyDef; groundBodyDef

我看到的分配userData的大多数示例如下所示:

CCSprite *sprite = [CCSprite spriteWithFile:@"whatever.png" rect:CGRectMake(0, 0, screenSize.width, screenSize.height)];

    sprite.tag = kWallTag;
    [self addChild:sprite];

    b2BodyDef groundBodyDef;
    groundBodyDef.position.Set(0,0);
    groundBodyDef.userData = (__bridge void*)sprite;

如果你用的是雪碧,那没关系。但在我的例子中,我不想创建精灵,因为我只想测试与屏幕边缘的碰撞。我可以创建一个只有一个边框的屏幕大小的精灵,但我不想仅仅为了检测墙壁而使用那么多的纹理内存。所以我的问题是如何将kWallTag分配给groundBodyDef,而不将其分配给sprite。如何检索标记值?

我已经回答了第一部分:

GenericUserData *usrData = (GenericUserData*)malloc(sizeof(GenericUserData));
usrData->tag = kWallTag;
groundBodyDef.userData = usrData;
但我不知道如何测试通用数据:

if (bodyA->GetUserData() != NULL && bodyB->GetUserData() != NULL) {
    CCSprite *spriteA = (__bridge CCSprite *) bodyA->GetUserData();
    CCSprite *spriteB = (__bridge CCSprite *) bodyB->GetUserData();

如何测试通用用户数据,而不是仅仅假设它是一个CCSprite?

为userdata创建一个类,该类包含一个id字段和一个type字段。根据是否添加了精灵或标记对象(不要使用struct,将其设置为类),可以手动设置类型。或者通常只使用id类型和iskindof类