如何使用 SKSpriteKit 使球仅垂直弹跳而不水平弹跳?

Jim*_*Lee 5 xcode game-physics ios sprite-kit swift

我正在制作一个 iOS 应用程序,其中我只希望球向上和向下弹起,而不是水平或以任何其他角度弹起。不幸的是,我决定设计游戏的方式导致了一些问题。这是一个 GIF,显示了我的问题所在:

在此输入图像描述

基本上:有时当我单击旋转五边形时,当我只想让它上下移动时,它会以一定角度击中球。

这是我的球代码:

func createBallNode(ballColor: String) -> SKSpriteNode {
    let ball = SKSpriteNode(imageNamed: ballColor)
    ball.position = CGPoint(x: CGRectGetMidX(frame), y: CGRectGetMidY(frame)+1)

    ball.physicsBody = SKPhysicsBody(circleOfRadius: 25)
    ball.physicsBody?.affectedByGravity = true
    ball.physicsBody?.restitution = 0.99
    ball.physicsBody?.linearDamping = 0
    ball.physicsBody?.friction = 0

    ball.physicsBody?.categoryBitMask = ColliderType.Ball.rawValue
    ball.physicsBody?.contactTestBitMask = ColliderType.Rect.rawValue
    ball.physicsBody?.collisionBitMask = ColliderType.Rect.rawValue

    return ball
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我可以将球设计为始终沿某条线(垂直)移动吗?有没有人对球有设计建议,或者可能有不同的移动方式(SKActions,例如:moveTo 而不是使用重力)。

让我知道。谢谢!

0x1*_*41E 2

要将节点的 x 坐标限制为固定值,请定义 并将SKRange最小和最大参数设置为相同值。

let centerX = ball.position.x
let range = SKRange(lowerLimit:centerX, upperLimit:centerX)
Run Code Online (Sandbox Code Playgroud)

从范围中,定义一个positionX约束

let constraint = SKConstraint.positionX(range)
Run Code Online (Sandbox Code Playgroud)

最后,将约束添加到节点的constraints数组中

ball.constraints = [constraint]
Run Code Online (Sandbox Code Playgroud)

如果您将其添加到语句上方,这应该适用于您现有的代码return ball