Swift SpriteKit добавляет физику к нарисованной пользователем линии - PullRequest
0 голосов
/ 18 июня 2019

Я хочу создать игру, в которой игрок рисует линию с физикой, похожую на игру Happy Glass.

Что я пробовал:

 override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches{

        let location = touch.location(in: self)

        touchPosition = location
    }
}

func draw(pos: CGPoint){
    let node = SKSpriteNode(imageNamed: "circle")
    node.position = CGPoint(x: pos.x, y: pos.y)
    node.size = CGSize(width: 10, height: 10)
    node.physicsBody = SKPhysicsBody(circleOfRadius: node.frame.width / 2)
    //set up the physics

    self.addChild(node)
}

override func didSimulatePhysics() {
    if touching{
        draw(pos: touchPosition)
    }

}

Таким образом, я в основном меняю переменную touchPosition при каждом перемещении касания (когда пользователь проводит пальцем по экрану), затем я использовал в качестве повторяющегося таймера didSimulatePhysics для добавления маленьких кружков в touchPosition с физикой на них.

Проблема:

Это все работает. Единственная проблема в том, что они слишком разложены. Я хочу, чтобы это была непрерывная линия, но метод touchesMoved не распознает достаточно касаний, поэтому выглядит так.

enter image description here

Есть ли способ распознавать касания чаще, чтобы я мог заполнить всю строку или каким-то образом сделать это с помощью CGPath? Я просто не могу иметь эти промежутки между этими точками в основном потому, что у меня не может быть других узлов с физическими телами, падающими между трещинами.

Другое дело, что точки постоянно перемещаются за пределы экрана с помощью SKAction, поэтому я могу просто нарисовать линию CGPath от текущего касания до последнего касания, потому что точка от последнего касания будет слегка перемещена, поэтому я ' Я не совсем понимаю, что делать, и любые предложения будут полезны.

Спасибо

...