Ios categoryBitMask';雪碧套装中允许有什么?
我听说每个精灵套件游戏只允许使用32种不同的分类。这有什么办法吗?我绝对需要更多(因为这是一场开放世界的比赛,大概需要3-4倍)。我设置了我的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
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属性的第二种方法的例子吗?