Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在SpriteKit中使用弹性绳_Ios_Swift_Sprite Kit_Game Physics_Skphysicsjoint - Fatal编程技术网

Ios 在SpriteKit中使用弹性绳

Ios 在SpriteKit中使用弹性绳,ios,swift,sprite-kit,game-physics,skphysicsjoint,Ios,Swift,Sprite Kit,Game Physics,Skphysicsjoint,我正在做一个简单的游戏,它有一根固定在屏幕中间的弹性绳子,绳子的另一端也有一个球。通过在屏幕上移动手指,你可以移动球,这个想法就是通过将球拉向底部,将球向上抛 到目前为止,我的代码如下所示: var ball = SKSpriteNode(imageNamed: "Ball") override func didMove(to view: SKView) { var ropeSegments = [SKSpriteNode]() let ropeHolder = SKSpri

我正在做一个简单的游戏,它有一根固定在屏幕中间的弹性绳子,绳子的另一端也有一个球。通过在屏幕上移动手指,你可以移动球,这个想法就是通过将球拉向底部,将球向上抛

到目前为止,我的代码如下所示:

var ball = SKSpriteNode(imageNamed: "Ball")

override func didMove(to view: SKView) {
    var ropeSegments = [SKSpriteNode]()

    let ropeHolder = SKSpriteNode(imageNamed: "RopeHolder")
    ropeHolder.position = CGPoint(x: frame.midX, y: frame.midY)
    ropeSegments.append(ropeHolder)
    addChild(ropeHolder)

    ropeHolder.physicsBody = SKPhysicsBody(circleOfRadius: ropeHolder.size.width / 2)
    ropeHolder.physicsBody?.isDynamic = false

    for i in 0..<30 {
        let ropeSegment = SKSpriteNode(imageNamed: "RopeTexture")
        let offset = ropeSegment.size.height * CGFloat(i + 1)
        ropeSegment.position = CGPoint(x: ropeHolder.position.x, y: ropeHolder.position.y - offset)
        ropeSegments.append(ropeSegment)
        addChild(ropeSegment)

        ropeSegment.physicsBody = SKPhysicsBody(rectangleOf: ropeSegment.size)
    }

    for i in 1..<31 {
        let nodeA = ropeSegments[i - 1]
        let nodeB = ropeSegments[i]
        let joint = SKPhysicsJointPin.joint(withBodyA: nodeA.physicsBody!, bodyB: nodeB.physicsBody!, anchor: CGPoint(x: nodeA.frame.midX, y: nodeA.frame.midY))

        physicsWorld.add(joint)
    }

    ball.position = CGPoint(x: frame.midX, y: ropeSegments.last!.position.y - ball.size.height / 2)
    ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.size.width / 2)
    addChild(ball)

    let joint = SKPhysicsJointPin.joint(withBodyA: ropeSegments.last!.physicsBody!, bodyB: ball.physicsBody!, anchor: CGPoint(x: ropeSegments.last!.frame.midX, y: ropeSegments.last!.frame.midY))
    physicsWorld.add(joint)

    let moveAction = SKAction.move(to: CGPoint(x: frame.midX - 100, y: frame.midY), duration: 0.5)
    ball.run(moveAction)
}

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let point = touch.location(in: self)
        ball.position = point
    }
}
var ball=SKSpriteNode(图像名为:“ball”)
覆盖func didMove(到视图:SKView){
变量ropeSegments=[SKSpriteNode]()
让ropeHolder=SKSpriteNode(图像名为“ropeHolder”)
ropeHolder.position=CGPoint(x:frame.midX,y:frame.midY)
ropeSegments.append(ropeHolder)
addChild(绳索固定器)
ropeHolder.physicsBody=SKPhysicsBody(圆形半径:ropeHolder.size.width/2)
ropeHolder.physicsBody?.isDynamic=false

对于0中的i..您是否为弹簧接头的阻尼和/或频率属性尝试了不同的值?是的,我尝试了一些值,但其行为方式与
SKPhysicsJointPin
相同。可能我做错了什么。一定要使用一系列弹簧接头。您可能需要将频率设置为非常高的级别,并将阻尼设置为v非常低的级别,然后调整。你解决了这个问题吗?我可能有一个解决方案。我还没有时间解决它。你的想法是什么?