2015-10-26 4 views
0

У меня есть круг под названием circle и строка под названием ground в представлении.Перемещение объекта в определенной области

enter image description here

Я могу перетащить & движения круга в целом зрения, но когда я пытаюсь ограничить его (в коде), чтобы двигаться только под областью земли - это работает (когда я пытаюсь перетащить его над землей), и круг перемещается только по моему перетаскиванию x, но когда я пытаюсь перетащить его обратно под землю - кружок перемещается только по перемещению местоположения x, а перемещение y-позиции не изменяется (y - это земля y).

Как я могу заставить его двигаться назад, свободным способом, под землей и не только положением перетаскивания x? Вот что я пытался до сих пор:

let ground = SKSpriteNode() 
    var circle = SKShapeNode(circleOfRadius: 40) 

    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

//  ground.physicsBody?.dynamic = false 
     ground.color = SKColor.redColor() 
     ground.size = CGSizeMake(self.frame.size.width, 5) 
     ground.position = CGPoint(x: CGRectGetMidX(self.frame), y: self.frame.size.height/5) 

     self.addChild(ground) 

     circle.position = CGPointMake(CGRectGetMidX(self.frame) ,CGRectGetMinY(ground.frame) - (circle.frame.size.height/2)) 
     circle.strokeColor = SKColor.blackColor() 
     circle.glowWidth = 1.0 
     circle.fillColor = SKColor.orangeColor() 

     self.addChild(circle) 

    } 
    var lastTouch: CGPoint? = nil 
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     /* Called when a touch begins */ 
    let touch = touches.first 
    let touchLocation = touch!.locationInNode(self) 
     if circle.position.y < ground.position.y - (circle.frame.size.height/2){ 
      circle.position = touchLocation 
     } else { 
      circle.position.x = CGFloat(touchLocation.x) 
     } 
    } 
    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     let touch = touches.first 
     let touchLocation = touch!.locationInNode(self) 
     if circle.position.y < ground.position.y - (circle.frame.size.height/2) { 
      circle.position = touchLocation 
     } else { 
      circle.position.x = CGFloat(touchLocation.x) 
     } 
    } 

ответ

0

Я решил, что:

В touchesMoved FUNC я писал этот код:

for touch in touches { 
      if touchLocation.y < ground.position.y { 
       circle.position = touchLocation 
      } else { 
       circle.position.x = touchLocation.x 
      } 
     } 
Смежные вопросы