【问题标题】:check if an instance of a spritenode is at a certain posion on the screen检查精灵节点的实例是否在屏幕上的某个位置
【发布时间】:2016-01-18 22:15:27
【问题描述】:

我试图让它在精灵的实例从上到下位于屏幕中心时,程序会在控制台上打印一些东西

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

【问题讨论】:

    标签: sprite-kit swift2


    【解决方案1】:

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

    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 来检测碰撞

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多