我听说每款雪碧游戏只允许使用32种不同类别的面罩。有办法绕过这件事吗?我绝对需要更多,然后(大约3-4倍,因为游戏是一个开放的世界)。我将我的分类掩码设置为:
static const uint64_t boundaryCategory = 0x1 << 0;
static const uint64_t mainCharCategory = 0x1 << 1;
...
static const uint64_t someOtherCategory = 0x1 << 31;我甚至将uint32_t改为uint64_t,希望它能使分类掩码的数量增加一倍。不幸的是,它没有。如果有人知道任何技术通过这个限制,我将非常感激。
发布于 2015-06-10 11:51:10
在这个问题上,有很多方法可以让你有创意。例如,您可以使用节点的name属性。让你所有的敌人都在一个categoryBitMask下,一旦接触到,就用他们的名字来区分他们。
另一种选择是使用SKNode字典属性。这允许您存储更详细的数据(如果需要的话),而不仅仅是一个字符串。
创建SKNode字典:
myNode.userData = [NSMutableDictionary dictionary];
[myNode.userData setObject:@"goblin" forKey:@"enemyType"];读字典:
NSString *myString = [myNode.userData objectForKey:@"enemyType"];发布于 2020-01-05 20:29:01
您可以使用UInt32定义超过32个对象。
这样做的一种方法是保留最后一位。它将减少用于项目的位数,但您将将其乘以所使用的位数。因此,如果我们只对31计数以上的项使用32位的掩码,我们就可以有2*31个对象。如果我们为更多的项目预留第32位和第31位,我们可以有4*30个对象等等。
即来自SKScene的正常32位
(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (catagoryContactBitMask == (carCategory | wallCategory))
{ ....
}
}例如,如果我们需要更多高于32的类别.因此,让我们保留第32位作为‘二级’位的项目,超过31...this将给我们提供2*31或62项。
静态const uint32_t 32位掩码= 0x1 << 32;//100000000000000000000000000000000000
静态const uint32_t wallCategory = 0x1 << 0;// 000000000000000000000000000001
静态const uint32_t porcheCategory = 0x1 << 1;// 000000000000000000000000000010
静态const uint32_t lamboCategory = 0x1 << 1\x 32位掩码;//10000000000000000000000000000010
碰撞检测应该是相同的
再次来自SKScene
(void)didBeginContact:(SKPhysicsContact *)contact
{
uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if ( catagoryContactBitMask == (wallCategory|porcheCategory))
{ ....
}
else if ( catagoryContactBitMask == (wallCategory|lamboCategory))
{ ....
}
}https://stackoverflow.com/questions/30752418
复制相似问题