我看到的分配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,而不给它指定精灵。我将如何检索标记值?
答案 0 :(得分:0)
我已经回答了第一部分:
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?