我正在制作一个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
}
无论如何,我可以将球设计为始终以某一直线(垂直方向)移动吗?有没有人对球有设计建议,或者有不同的移动方式(SKActions,例如:moveTo而不是使用重力)。
让我知道。谢谢!
答案 0 :(得分:2)
球不规则地弹跳,因为当你移动五边形的两侧时,球会触及一点点的侧面并改变其轨迹。这就是重力的作用。
如果你想以你自己的方式反弹球,请使用SKAction
这样:
let up = SKAction.moveBy(CGVector(dx: 0, dy: 40), duration: 0.3)
let down = SKAction.moveBy(CGVector(dx: 0, dy: -40), duration: 0.3)
let upAndDown = SKAction.sequence([up, down])
let foreverUpDown = SKAction.repeatActionForever(upAndDown)
只需在球上拨打runAction
。
答案 1 :(得分:2)
要将节点的x坐标限制为固定值,请定义SKRange
,并将最小和最大参数设置为相同的值。
let centerX = ball.position.x
let range = SKRange(lowerLimit:centerX, upperLimit:centerX)
在范围内,定义positionX
约束
let constraint = SKConstraint.positionX(range)
最后,将约束添加到节点的constraints
数组
ball.constraints = [constraint]
如果您将现有代码添加到return ball
语句上方,则应该可以使用此代码。