Хорошо, поэтому я довольно новичок в наборе спрайтов, и я работаю в Swift. У меня есть 2 спрастных узла, savior
и chicken1
. savior
имеет физическое тело и это, как я поставил его:Swift: обнаружение столкновения спрайтов без создания физических тел?
var saviorTexture = SKTexture(imageNamed: "1.png")
saviorTexture.filteringMode = SKTextureFilteringMode.Nearest
savior = SKSpriteNode(texture: saviorTexture)
savior.setScale(0.2)
savior.position = CGPoint(x: self.frame.size.width * 0.5, y: self.frame.size.height * 0.2)
savior.physicsBody?.dynamic = true
savior.physicsBody?.allowsRotation = false
savior.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(savior.size.width, savior.size.height))
self.addChild(savior)
chicken1
сейчас не имеет физический организм:
var chickenTexture = SKTexture(imageNamed: "block1")
chicken1 = SKSpriteNode(texture: chickenTexture)
chicken1.setScale(0.75)
chicken1.position = CGPoint(x: self.size.width * 0.38, y: self.size.height * 1.2)
self.addChild(chicken1)
Мне нужно знать, как я могу иметь обнаружение столкновений (т.е. если спаситель и цыпленок прикоснуться, выполните это) между этими объектами, предпочтительно, не делая chicken1
физическим телом.
Когда я делаю chicken1
физическое тело, он внезапно становится неустойчивым и перемещает другие объекты вокруг.
Если нет способа обнаружения столкновения без физики, как можно сделать chicken1
физическим телом, на которое не воздействует ничто и просто проходит через другие физические тела?
EDIT **************
Так я последовал beginner swift sprite kit - node collision detection help (SKPhysicsContact) и есть:
изменил мой класс, чтобы быть
SKPhysicsContactDelegate
:класс GameScene: SKScene, SKPhysicsContactDelegate {
Написано следующее:
self.physicsWorld.contactDelegate = self savior.physicsBody?.categoryBitMask = saviorCategory savior.physicsBody?.contactTestBitMask = animalCategory savior.physicsBody?.collisionBitMask = 0 chicken1.physicsBody?.categoryBitMask = animalCategory chicken1.physicsBody?.contactTestBitMask = saviorCategory chicken1.physicsBody?.collisionBitMask = 0 func didBeginContact(contact: SKPhysicsContact) { var saviorPhysics: SKPhysicsBody var chicken1Physics: SKPhysicsBody if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { saviorPhysics = contact.bodyA chicken1Physics = contact.bodyB } else { saviorPhysics = contact.bodyB chicken1Physics = contact.bodyA } if saviorPhysics.categoryBitMask == 0 && chicken1Physics.categoryBitMask == 1 { self.chicken1.removeFromParent() } }
Я запускал его, и ошибок не было, но это не сработало.
Я смотрел на это учебник, но его для цели С, так что я следовал этой ссылке, которая модифицирует его для Swift: http://stackoverflow.com/questions/26270504/beginner-swift-sprite-kit-node-collision-detect-help-skphysicscontact – skyguy
не работает. спаситель падает через другое физическое тело, которое мне нужно для его столкновения, и курица1 не удаляется при контакте с спасителем. – skyguy