Создать raycast в спрайтеките - PullRequest
0 голосов
/ 09 февраля 2020

Я строю игру, используя Spritekit, и пытаюсь построить raycast, который соединит игрока с точкой, в которой он нажал. Это будет как веревка, которая соединяет игрока с точкой, где он или она постучал. Например, если игрок коснется точки x: 0, y: 0, он станет веревкой, соединяющей обе вещи друг с другом. Со временем веревка станет короче, и игрок будет притягиваться к ней. У игрока есть физическое тело. Когда игрок отпускает палец, веревка будет удалена, и игрока больше не будут тянуть к этой точке.

Я хочу заархивировать то же самое, как если бы вы искали raycast в единстве, но с помощью спрайтекита.

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

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 10 марта 2020

Raycast поддерживается PhysicsWorld объектом на вашей сцене, с методом

func enumerateBodies(alongRayStart start: CGPoint, end: CGPoint, using block: @escaping (SKPhysicsBody, CGPoint, CGVector, UnsafeMutablePointer<ObjCBool>) -> Void)

Вы можете использовать так:

self.physicsWorld.enumerateBodies(alongRayStart: playerPosition, end: clickPosition) { body, point, vector, object in
    if let node = body.node as? SKSpriteNode {
        node.color = SKColor.red.withAlphaComponent(0.2)
        let pointNode = SKSpriteNode(color: .cyan, size: CGSize(width: 5, height: 5))
        pointNode.position = point
        let path = CGMutablePath()
        path.move(to: playerPosition)
        path.addLine(to: clickPosition)
        path.closeSubpath()
        let line = SKShapeNode(path: path)
        line.strokeColor = .green
        line.fillColor = .green
        self.addChild(line)
        self.addChild(pointNode)
    }
}

И получить этот результат на каждый клик:

enter image description here

Полный пример здесь: https://github.com/Maetschl/SpriteKitExamples/blob/master/Raycast2dLinesVsObjects/Raycast2dLinesVsObjects/GameScene.swift

...