4 Replies
      Latest reply on Feb 6, 2020 12:00 AM by hamimate
      hamimate Level 1 Level 1 (0 points)

        I'm trying to figure out that a SKSpriteNode has completely iterated over another SKSpriteNode, this the code I have come up so far,

        if (node.frame.maxY == player.frame.minY){ 
        player.physicsBody?.collisionBitMask = collisionTypes.vortex.rawValue 
        }

        I know it's simple enough, but I'm lost here ;(

        • Re: know that skspritenode has completely moved over another skspritenode
          igorland Level 1 Level 1 (0 points)

          What do you mean by "iterated"? If I understand your subject correctly... This can be used when node 1 is just partially within the boundary of the second node:

           

          if node1.intersects(node2) {  }

           

          If you want to know, whether your first node is entirely within the boundaries of the second node, this should work:

           

          // Node 1 intersects HEIGHT of Node2
          if  ( node1BottomY <= node2TopY && node1TopY >= node2BottomY ) || ( node1TopY >= node2BottomY && node1BottomY <= node2TopY )
          {
                      intersectsHeight = true
          }
          // Node 1 intersects WIDTH of Node 2
          if  ( node1LeftX <=node2RightX && node1RightX >= node2LeftX ) || ( node1RightX >= node2LeftX && node1LeftX <= node2RightX )
          {
                      intersectsWidth = true
          }
          
          // If Node1 intersects both height and width of Node 2, it is completely withoin its boundaries:
          if intersectsHeight == true && intersectsWidth == true {  }

           

          This is how you may check if half of the first node intesects the second node:

           

          if node2.contains(CGPoint(x: node1.frame.midX, y: node1.frame.midY)) 
          • Re: know that skspritenode has completely moved over another skspritenode
            hamimate Level 1 Level 1 (0 points)

            Set the contactTestBitMask properties of both objects. then detect when they collide in the didBegin func and then detect when they stop colliding in the didEnd func

             

            player.physicsBody?.contactTestBitMask = collisionTypes.bullet.rawValue
            bullet.physicsBody?.contactTestBitMask = collisionTypes.player.rawValue
            
            func didBegin(_ contact: SKPhysicsContact) {
              //detect your collision and do what you need to do
              //maybe set a bool to true if you have multiple collision types
            }
            
            func didEnd(_ contact: SKPhysicsContact) {
              //check that the above collison is the one that ended
              //run appropriate code for end collision
            }