2016-05-05 5 views
0

Если вы играли в Angry Birds или любой бассейн игру, прежде чем вы бы знакомы с тем, что я пытаюсь сделать, в основном то, что я хочу это:Нарисуйте прямую линию для прицеливания

1- Нарисуйте линию в touchesMoved так, что игрок может знать, в каком направлении он нацеливается.

2- Я хочу, чтобы линия отражалась в правильном направлении, когда она попадает на другие объекты. До сих пор у меня есть это:

Update:

var ref = CGPathCreateMutable() 

     override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) { 

      for touch in touches { 
       let location = touch.locationInNode(self) 

       let path = CGPathCreateMutable() 
       CGPathMoveToPoint(ref, nil, position.x - 100 , position.y - 100) 
       CGPathAddLineToPoint(ref, nil, -location.x, -location.y) 

       line.removeFromParent() 
       line.path = ref 

       line.strokeColor = UIColor.redColor() 
       line.lineWidth = 20 
       line.antialiased = true 
       line.fillColor = UIColor.blueColor() 
       addChild(line) 
      } 
     } 

Я добавил - до того места, так что линия получает втягивается перед узлом ао она дает более прицеливания смысл, но оставить меня с 2 проблемами:

1- Я хочу, чтобы линия имела предел, в котором она попала перед узлом, но в то же время я хочу, чтобы ее конец был текущим местоположением касания. (В принципе, я хочу, чтобы он проходил через узел)

2- Я до сих пор не знаю, как я могу заставить его задуматься под прямым углом, когда он попал в стену, или что-то такое, что дает представление об узле отскакивают от этой стены.

+0

Я не специалист по Sprite или даже Swift, но похоже, что вам нужно мутировать объект SKShapeNode вместо создания нового. – dantiston

ответ

0

Альтернативой удалению и добавлению узла линии в каждый кадр следует, что SKShapeNode имеет 1 пиксель на 1 пиксель, а затем масштабирует по оси x расстояние от pt до точки pt, а затем поворачивает его. Используйте let angle = arctan2(P2_y - P1_y , P2_x - P1_x) (я считаю, что arctan2 обрабатывает деление на 0 для вас), чтобы получить угол

+0

Это прекрасно работает, любая идея о том, чтобы поразить предмет отражения стены? – Abdou023

+0

Такая же концепция, но вы добавляете второй skshapenode, это начинается в конце строки 1 и перемещается к концу пункта 2 – Knight0fDragon

0

SpriteKit не рисует API. В SpriteKit вы в основном добавляете элементы в сцену и анимируете элементы. Вам нужно удалить предыдущую строку (если она есть), а затем добавить новую строку к кадру в каждом кадре. Вот псевдо-код, чтобы дать вам представление, как это сделать:

class ParentNode: SKNode { 

    private var lines = [SKShapeNode]() 

    /// Called before each frame is rendered 
    override func update(currentTime: CFTimeInterval) { 
     self.drawLine() 
    } 

    func drawLine() { 
     let _ = self.lines.map { $0.removeFromParent() } 
     self.lines.removeAll() 

     if let path = self.createDrawingPath() { 
     let lineNode = SKShapeNode() 
     lineNode.path = path 
     lineNode.strokeColor = UIColor.whiteColor() 
     lineNode.lineWidth = 3.0 

     self.addChild(lineNode) 
     self.lines.append(lineNode) 
     } 
    } 
} 

В вашем случае просто подобная вещь, я использовал обновление для удаления/добавления новой строки, но я думаю, вы можете использовать touchesMoved (затрагивает: withEvent), чтобы сделать это.

+0

У меня теперь есть код, который удаляет строку в начале функции touchesMoved и добавляет ее снова по завершении, проверьте мое обновление. – Abdou023

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