2016-01-18 43 views
1

我试图做到这一点,以便当精灵的一个实例在屏幕的中心从顶部到底部时,程序将打印一些东西给控制台检查一个spritenode的实例是否在屏幕上的某个位置

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

回答

0

,如果这是用于调试的目的,你可以使用:

override func update(currentTime: NSTimeInterval) 
{ 
    checkMiddle() 
} 

更新()函数每一帧之前调用,所以你必须要小心你把在那里

如果您不需要做要作为经常检查为(每秒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检测碰撞

相关问题