Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios categoryBitMask';雪碧套装中允许有什么?_Ios_Objective C_Sprite Kit_Bitmask - Fatal编程技术网

Ios categoryBitMask';雪碧套装中允许有什么?

Ios categoryBitMask';雪碧套装中允许有什么?,ios,objective-c,sprite-kit,bitmask,Ios,Objective C,Sprite Kit,Bitmask,我听说每个精灵套件游戏只允许使用32种不同的分类。这有什么办法吗?我绝对需要更多(因为这是一场开放世界的比赛,大概需要3-4倍)。我设置了我的categorybitmask,如下所示: static const uint64_t boundaryCategory = 0x1 << 0; static const uint64_t mainCharCategory = 0x1 << 1; ... static const uint64_t someOtherCa

我听说每个精灵套件游戏只允许使用32种不同的分类。这有什么办法吗?我绝对需要更多(因为这是一场开放世界的比赛,大概需要3-4倍)。我设置了我的categorybitmask,如下所示:

static const uint64_t boundaryCategory    = 0x1 << 0;
static const uint64_t mainCharCategory    = 0x1 << 1;
...
static const uint64_t someOtherCategory   = 0x1 << 31;

static const uint64\u t boundaryCategory=0x1关于这个问题,您可以通过多种方式获得创造性。例如,可以使用节点的name属性。让你所有的敌人都在一个类别下,一旦接触,用他们的名字来区分他们

另一种选择是使用SKNode dictionary属性。这允许您在需要时存储比字符串更详细的数据

创建节点字典:

myNode.userData = [NSMutableDictionary dictionary];
[myNode.userData setObject:@"goblin" forKey:@"enemyType"];
NSString *myString = [myNode.userData objectForKey:@"enemyType"];
阅读字典:

myNode.userData = [NSMutableDictionary dictionary];
[myNode.userData setObject:@"goblin" forKey:@"enemyType"];
NSString *myString = [myNode.userData objectForKey:@"enemyType"];

可以使用UInt32定义32个以上的对象

一种方法是保留最后一位。它会减少项目的位数,但会将其乘以使用的位数。因此,如果我们在31计数以上的项目上仅使用32位作为掩码,则可以有2*31个对象。如果我们为更多项目保留第32位和第31位,我们可以有4*30个对象,以此类推

i、 e来自场景的正常32位

(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 

    if (catagoryContactBitMask == (carCategory | wallCategory))
    {    ....
    }

}
(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 

    if ( catagoryContactBitMask == (wallCategory|porcheCategory))
    {    ....
    }
    else if ( catagoryContactBitMask == (wallCategory|lamboCategory))
    {    ....
    }

}
例如,如果我们需要更多高于32的类别。。。 因此,让我们将第32位保留为大于31的项目的“第二级”位…这将为我们提供2*31或62个项目


静态常数uint32\u t 32bitMask=0x1您是对的。由于Sprite工具包对代表32种不同物理类别的32位整数使用位掩码,所以不能有更多(即使在Xcode 7中也是如此)。对于最大值(UInt32*2),4294967295,即二进制中的11111111111111111111,您将使此对象与所有其他对象碰撞。好的。所以绝对没有办法突破这个限制?我是否可以使用其他技术来提供与“char1.physicsBody.categoryBitMask=char1Category;”相同或类似的功能?太棒了!为什么我没想到呢?谢谢,好的!第一个例子,关于节点的name属性,工作非常出色!例如“(firstBody.categoryBitMask=[[u-worldNode-childNodeWithName:@“烧焦”].physicsBody.categoryBitMask)&&(等等)”。然而,sangony,你能举一个关于SKNode dictionary属性的第二种方法的例子吗?