SpriteKit/SKPhysics radialGravityField той же категории всегда привлекают друг друга?
Столкнувшись с проблемой, пытаясь использовать поля радиальной гравитации в SpriteKit
Я не хочу, чтобы объекты одного вида (как определено categoryBitMask, чтобы привлечь друг друга)
Вот как я это делаю:
struct PhyscisCategory {
static let None : UInt32 = 0
static let All : UInt32 = UInt32.max
static let Star : UInt32 = 0b1
static let Planet : UInt32 = 0b10
}
<....>
Planet1.physicsBody!.categoryBitMask = PhyscisCategory.Planet
Planet1.physicsBody!.fieldBitMask = PhyscisCategory.Star
Planet2.physicsBody!.categoryBitMask = PhyscisCategory.Planet
Planet2.physicsBody!.fieldBitMask = PhyscisCategory.Star
Что бы я ни пробовал, Планеты всегда взаимно притягиваются (за исключением того, что я установил fieldBitMask на 0, но, разумеется, их больше не привлекает и Звезда)! Я ожидаю от этих двух строк кода, что только гравитационные поля звезд будут влиять на планеты...
из документации:
"fieldBitMask: маска, определяющая, какие категории физических полей могут оказывать силы на это физическое тело. Когда физическое тело находится внутри области объекта SKFieldNode, свойство categoryBitMask этого узла поля сравнивается со свойством fieldBitMask этого физического тела путем выполнения логического Операция "И". Если результатом является ненулевое значение, эффект узла поля применяется к физическому телу ".
Я делаю что-то не так?
1 ответ
Ваши маски не в порядке. В двоичном виде они выглядят так:
0000 0000 1011 0001 (stars)
0000 1011 0001 0000 (planets)
Логичный AND
из этих двух дает ненулевое значение:
0000 0000 0001 0000
Так что если SpriteKit
оценивает битовую маску поля вашей планеты с помощью битовой маски категории другой планеты, они будут привлекать друг друга. Попробуйте эти маски вместо:
static let Star : uint32_t = 0x1 << 0
static let Planet : uint32_t = 0x1 << 1
(Не уверен, что это правильный код Swift, но вы поняли идею). Вы можете расширить маски, всегда сдвигая влево на один шаг дальше. Эти маски всегда будут давать нулевое значение, если AND
-ed.