0

我正在使用 Spritekit 构建游戏,并尝试构建一个光线投射,将玩家与玩家点击的点连接起来。它就像一根绳子,将玩家连接到他或她点击的点。例如,如果玩家在 x: 0, y: 0 点轻敲,那么它将变成一根绳子,将两者相互连接。随着时间的推移,绳子会变短,玩家将被拖到绳子上。玩家确实有一个物理体。当玩家松开手指时,绳子将被移除,玩家不会再被拖到那个点。

我想存档与统一搜索光线投射但使用 spritekit 相同的内容。

我知道如何实现触摸功能以及他或她何时释放触摸。所以问题是我如何按照描述进行光线投射。我还想要某种视觉效果,这意味着 skshapenode 或指示玩家要去哪里的东西。

尝试过使用 SkPhysicsJoints 但我没有成功。

任何帮助,将不胜感激!

4

1 回答 1

0

场景中的physicsWorld对象支持Raycast ,方法是

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

并在每次点击时获得此结果:

在此处输入图像描述

完整的例子在这里:https ://github.com/Maetschl/SpriteKitExamples/blob/master/Raycast2dLinesVsObjects/Raycast2dLinesVsObjects/GameScene.swift

于 2020-03-10T19:31:50.570 回答