首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >雪碧套件中允许的最大类别数是多少?

雪碧套件中允许的最大类别数是多少?
EN

Stack Overflow用户
提问于 2015-06-10 09:29:43
回答 2查看 382关注 0票数 4

我听说每款雪碧游戏只允许使用32种不同类别的面罩。有办法绕过这件事吗?我绝对需要更多,然后(大约3-4倍,因为游戏是一个开放的世界)。我将我的分类掩码设置为:

代码语言:javascript
复制
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,希望它能使分类掩码的数量增加一倍。不幸的是,它没有。如果有人知道任何技术通过这个限制,我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-10 11:51:10

在这个问题上,有很多方法可以让你有创意。例如,您可以使用节点的name属性。让你所有的敌人都在一个categoryBitMask下,一旦接触到,就用他们的名字来区分他们。

另一种选择是使用SKNode字典属性。这允许您存储更详细的数据(如果需要的话),而不仅仅是一个字符串。

创建SKNode字典:

代码语言:javascript
复制
myNode.userData = [NSMutableDictionary dictionary];
[myNode.userData setObject:@"goblin" forKey:@"enemyType"];

读字典:

代码语言:javascript
复制
NSString *myString = [myNode.userData objectForKey:@"enemyType"];
票数 7
EN

Stack Overflow用户

发布于 2020-01-05 20:29:01

您可以使用UInt32定义超过32个对象。

这样做的一种方法是保留最后一位。它将减少用于项目的位数,但您将将其乘以所使用的位数。因此,如果我们只对31计数以上的项使用32位的掩码,我们就可以有2*31个对象。如果我们为更多的项目预留第32位和第31位,我们可以有4*30个对象等等。

即来自SKScene的正常32位

代码语言:javascript
复制
(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

代码语言:javascript
复制
(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t catagoryContactBitMask = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 

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

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30752418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档