Tag: 位掩码

Sprite Kit允许的categoryBitMask的最大数量是多less?

我听说每个Sprite Kit游戏只允许使用32个不同的categorybitmask。 有没有办法解决? 我绝对需要更多的(大约3-4倍以上,因为游戏是一个开放的世界)。 我build立了我的categorybitmask如下: 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希望这将加倍我可以使用的categorybitmask的数量。 不幸的是,事实并非如此。 如果有人知道任何技术绕过这个限制,我将非常感激。

游戏引擎Collison Bitmask …为什么0x01等?

在Sprite Kit(iOS开发版)和Cocos2d-x(我知道它几乎是Sprite Kit的灵感,因此他们使用了很多相同的工具)的情况下,我终于决定找出这个原因发生: 当使用物理引擎时,我创build一个精灵,并添加一个physicsBody到它。 大多数情况下,我知道如何设置类别,碰撞和联系位掩码以及它们的工作方式。 问题是实际的位掩码数字: SpriteKit: static const uint32_t missileCategory = 0x1 << 0; sprite.physicsBody.categoryBitMask = missileCategory; 的Cocos2D-X: sprite->getPhysicsBody()->setCategoryBitmask(0x01); // 0001 我完全困惑,为什么我会写0x01或0x1 << 0在任何情况下。 我有点得到,他们使用hex,这与32位整数有关。 而据我已经能够谷歌,0x01是二进制0001是十进制1。 0x02是二进制的0010,十进制是2。 好的,所以有这些转换,但为什么在这个世界上,我会用它们来做类似的事情? 就我的逻辑而言,如果我说出一个玩家类别,一个敌人类别,一个导弹类别和一个墙类别,这只是4个类别。 为什么不使用string的类别? 或者甚至只是二进制数字,任何非CS的人会理解像0,1,2和3? 最后,我很困惑为什么有32个不同的类别可用? 我以为一个32位的整数有0到几十亿的数字(当然是无符号的)。 那为什么我没有几十个不同的可能类别呢? 有没有我不理解的某种优化? 或者这只是他们使用的一个老惯例,但是不需要? 还是有什么事情发生,只有两个学期的大学课程CS培训的人不明白?