Я использую SpriteKit и Swift 2. Я знаю, что есть много учебников, но я чувствую, что они устарели или я схожу с ума, потому что кажется, что у всех есть другое мнение о том, что делают разные маски физики.Объекты, сталкивающиеся друг с другом, когда они не должны (SpriteKit)
Я просто пытаюсь заставить два объекта столкнуться со всем, кроме друг друга. Это то, что я сделал:
var everythingElseCategory: UInt32 = 3
var object1Category: UInt32 = 2
var object2Category: UInt32 = 4
object1.physicsBody?.categoryBitMask = object1;
object1.physicsBody?.collisionBitMask = everythingElseCategory
object2.physicsBody?.categoryBitMask = object2;
object2.physicsBody?.collisionBitMask = everythingElseCategory
everythingElse.physicsBody?.categoryBitMask = everythingElseCategory;
everythingElse.physicsBody?.collisionBitMask = 0 //its a wall
я должен иметь концепцию битовых масок перепутались, потому что для меня столкновение битовой маски является то, что он сталкивается с, но я, кажется, должен быть неправильным, потому что это решение не работает , Object2 сталкивается с object1, но object1 не сталкивается с object2 !!!?! ??!
Любые идеи относительно того, что я делаю неправильно?
Спасибо!
Ключ -> те битовые маски, чтобы избежать нежелательного поведения, что лучше назначать их таким образом UInt32 = 0x1 << 0. – ColdSteel
[Пример физики Apple SpriteKit] (https://developer.apple.com/library/mac/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Physics/Physics.html#//apple_ref/ doc/uid/TP40013043-CH6-SW15) также может представлять интерес. Вы используете целочисленные значения, где вам нужно использовать двоичный файл. Преобразуя их, ваша категория столкновения - '0011', где ваша' object2Category' '0100', что означает, что она не столкнется. Самый простой способ сделать это - использовать бит-сдвиг для создания бит-масок. – Gliderman
Посмотрите на эту статью в Википедии, чтобы лучше понять, как работают битмаски. Https://en.wikipedia.org/wiki/Mask_(computing) – Knight0fDragon