2015-04-07 5 views
1

Хорошо, поэтому я довольно новичок в наборе спрайтов, и я работаю в 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) и есть:

  1. изменил мой класс, чтобы быть SKPhysicsContactDelegate:

    класс GameScene: SKScene, SKPhysicsContactDelegate {

  2. Написано следующее:

    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() 
        } 
    
    } 
    

Я запускал его, и ошибок не было, но это не сработало.

ответ

2

Вы можете сделать это с помощью categoryBitMask и справиться с столкновением самостоятельно, ответив на SKSceneContactDelegate.

Таким образом, вы можете установить различные категории для разных узлов и обрабатывать столкновение между различными категориями по вашему усмотрению.

Учебник:

http://seodoa.com/2014/04/01/skphysicsbody-react-to-contact-but-not-to-collide/

+0

Я смотрел на это учебник, но его для цели С, так что я следовал этой ссылке, которая модифицирует его для Swift: http://stackoverflow.com/questions/26270504/beginner-swift-sprite-kit-node-collision-detect-help-skphysicscontact – skyguy

+0

не работает. спаситель падает через другое физическое тело, которое мне нужно для его столкновения, и курица1 не удаляется при контакте с спасителем. – skyguy

Смежные вопросы