【问题标题】:Cocos2d Box2d - assign generic userData to bodyDefCocos2d Box2d - 将通用 userData 分配给 bodyDef
【发布时间】:2013-03-06 00:54:42
【问题描述】:

我看到的大多数分配 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,而不给它分配精灵。我将如何检索标签值?

【问题讨论】:

    标签: cocos2d-iphone box2d box2d-iphone


    【解决方案1】:

    我已经回答了第一部分:

    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?

    【讨论】:

    • 通过为具有 id 字段和 type 字段的 userdata 创建一个类。您根据是否添加了精灵或标记对象手动设置类型(不要使用结构,将其设为类)。或者通常只使用 id 类型和 isKindOfClass
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多