2015-07-28 7 views
0

Я хочу создать узел слева и справа, чтобы при касании их птица летела влево или вправо.Пожалуйста, помогите мне О UITouch (SpriteKit)

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

Почему не это работает?

+0

Вы создали свойство physWorld? – mert

ответ

1

Причина, по которой возникают проблемы, заключается в том, что для динамического свойства physicalBody установлено значение false.

Вы должны установить

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

Вы можете прочитать больше о dynamic собственности here. Как видно из документов:

Значение по умолчанию - ДА. Если значение равно NO, физический объект игнорирует все силы и импульсы, применяемые к нему. Это свойство игнорируется на телах на основе краев; они автоматически статичны.

Возможно, вы установили dynamic как false, потому что узел может падать из-за силы тяжести физики. Чтобы противостоять этому, вы можете либо установить свойство physicalBody affectedByGravity, либо полностью изменить свой вид физики в отрасли gravity.

Смежные вопросы