请帮帮我关于UITouch(SpriteKit)

时间:2015-07-28 11:04:16

标签: swift sprite-kit

我想从左侧和右侧创建一个节点,当我触摸它们时,鸟会向左或向右飞行。

  1. 首先我创建了一个鸟类节点

  2. 然后,我创建了测试节点

    var groundleft = SKSpriteNode()
    groundleft.position = CGPoint(x: 0, y: 50)
    groundleft.size = CGSize(width: 500, height: 100)
    groundleft.color = UIColor(red: 7, green: 5, blue: 7, alpha: 20)
    
    
    groundleft.physicsBody = SKPhysicsBody(rectangleOfSize:    CGSizeMake(self.size.width, 100))
    groundleft.physicsBody?.dynamic = false
    groundleft.zPosition = 0.5
    
    groundleft.name = "toleft"
    
  3. 然后我实施了touchesBegan

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    
    
    let touch = touches.first as! UITouch
    let touchLocation = touch.locationInNode(self)
    let touchedNode = self.nodeAtPoint(touchLocation)
    
    if(touchedNode.name == "toleft"){
    
        bird.physicsBody?.velocity = CGVectorMake(0, 0)
        bird.physicsBody?.applyImpulse(CGVectorMake(-10, 100))
    
      }
    }
    
  4. 为什么不起作用?

1 个答案:

答案 0 :(得分:1)

您遇到问题的原因是因为physicsBody的动态属性设置为false。

您需要设置

groundleft.physicsBody?.dynamic = true //Or remove this line, as dynamic is true by default

您可以阅读有关dynamic属性here的更多信息。如文档中所示:

  

默认值为YES。如果值为NO,则物理体忽略   所有的力量和冲动都适用于它。此属性将被忽略   基于边缘的身体;它们是自动静止的。

您可能已将dynamic设置为false,因为该节点可能因物理世界的重力而下降。为了解决这个问题,你可以设置physicsBody的affectedByGravity属性,或者完全改变scene&world的gravity属性。