Sprite kit 检查spritenode的实例是否位于屏幕上的某个位置

Sprite kit 检查spritenode的实例是否位于屏幕上的某个位置,sprite-kit,swift2,Sprite Kit,Swift2,我正在尝试这样做,当精灵的一个实例从上到下位于屏幕中央时,程序将向控制台打印一些东西 var sprite = SKSpriteNode() override func didMoveToView(view: SKView) { //spawns an instance of the sprite NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("spawnObje

我正在尝试这样做,当精灵的一个实例从上到下位于屏幕中央时,程序将向控制台打印一些东西

var sprite = SKSpriteNode()    
override func didMoveToView(view: SKView) {

    //spawns an instance of the sprite
    NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: Selector("spawnObject"), userInfo: nil, repeats: true)

     //call the check middle function
    checkMiddle()
}

//spawns a sprite
func spawnObject() {

       let size = CGSizeMake(self.frame.size.width/3, self.frame.size.width3)


        self.physicsWorld.gravity = CGVectorMake(0, -CGFloat(objectSpeed))
        sprite = SKSpriteNode(imageNamed: "spriteImage")

        sprite.position = CGPointMake(CGFloat(100), self.frame.height)
        sprite.size = size
        sprite.physicsBody = SKPhysicsBody(circleOfRadius: self.frame.size.width)
        sprite.physicsBody?.affectedByGravity = true

        addChild(self.sprite)
}

//PRINT WHEN SPRITE IS IN THE CENTER OF SCREEN FROM TOP TO BOTTOM
func checkMiddle() {
     if sprite.position.y == self.frame.size.height/2 {
          print("center")
     }
}

如果这是为了调试目的,您可以使用:

override func update(currentTime: NSTimeInterval) 
{
   checkMiddle()
}
update()函数在每一帧之前都会被调用,因此您需要小心放入的内容

如果您不需要如此频繁地检查它(每秒60次),您还可以使用以下操作:

let checkCenterAction  = SKAction.runBlock(){ self.checkMiddle() }
let waitAction         = SKAction.waitForDuration( 0.1 ) // every 1/10th of a second
let checkAndWaitAction = SKAction.sequence([checkCenterAction, waitAction])
sprite.runAction(SKAction.repeatForever(checkAndWaitAction))

还有一个选项是使用SKPhysicsBody检测碰撞,如果这是为了调试目的,您可以使用:

override func update(currentTime: NSTimeInterval) 
{
   checkMiddle()
}
update()函数在每一帧之前都会被调用,因此您需要小心放入的内容

如果您不需要如此频繁地检查它(每秒60次),您还可以使用以下操作:

let checkCenterAction  = SKAction.runBlock(){ self.checkMiddle() }
let waitAction         = SKAction.waitForDuration( 0.1 ) // every 1/10th of a second
let checkAndWaitAction = SKAction.sequence([checkCenterAction, waitAction])
sprite.runAction(SKAction.repeatForever(checkAndWaitAction))
另一个选择是使用SKPhysicsBody来检测碰撞