我有一个简单的游戏,两条线从屏幕的顶部移动到底部。这两条线之间有一个固定的空间,球必须穿过那个空间,否则游戏结束。
我对游戏的基础没有任何问题,我可以添加两条线,每次都有不同位置的空间,但我也想提高线条的移动速度。我试图使用一个计时器并增加SKAction.move的TimeInterval,但由于后来添加的行更快,行之间的水平空间变小,我不想发生。
这是添加两行并将它们移动到屏幕底部的功能。
func addLines() {
let lineNodeFirst = SKSpriteNode(color: .red, size: CGSize(width: random(min: 100, max: 400), height: 10.0))
lineNodeFirst.position = CGPoint(x: -size.width / 2, y: 0 + size.height / 2 + 100)
lineNodeFirst.anchorPoint = CGPoint.zero
let actionMove = SKAction.move(to: CGPoint(x: lineNodeFirst.position.x, y: 0 - size.height / 2), duration: TimeInterval(2.3))
let actionMoveDone = SKAction.removeFromParent()
lineNodeFirst.run(SKAction.sequence([actionMove, actionMoveDone]))
let centerPoint = CGPoint(x: lineNodeFirst.size.width / 2 - (lineNodeFirst.size.width * lineNodeFirst.anchorPoint.x), y: lineNodeFirst.size.height / 2 - (lineNodeFirst.size.height * lineNodeFirst.anchorPoint.y))
lineNodeFirst.physicsBody = SKPhysicsBody(rectangleOf: lineNodeFirst.size, center: centerPoint)
lineNodeFirst.physicsBody?.isDynamic = true
lineNodeFirst.physicsBody?.categoryBitMask = 2
lineNodeFirst.physicsBody?.contactTestBitMask = 1
lineNodeFirst.physicsBody?.collisionBitMask = 0
self.addChild(lineNodeFirst)
let spaceBetweenNodes: CGFloat = 150
let lineNodeSecondWidth: CGFloat = size.width - lineNodeFirst.size.width - spaceBetweenNodes
let lineNodeSecond = SKSpriteNode(color: .red, size: CGSize(width: lineNodeSecondWidth, height: 10.0))
lineNodeSecond.anchorPoint = CGPoint.zero
let lineNodeSecondX = lineNodeFirst.position.x + lineNodeFirst.size.width + spaceBetweenNodes
lineNodeSecond.position = CGPoint(x: lineNodeSecondX, y: lineNodeFirst.position.y)
let actionMoveSecond = SKAction.move(to: CGPoint(x: lineNodeSecond.position.x, y: 0 - size.height / 2), duration: TimeInterval(2.3))
lineNodeSecond.run(SKAction.sequence([actionMoveSecond, actionMoveDone]))
let centerPointSecond = CGPoint(x: lineNodeSecond.size.width / 2 - (lineNodeSecond.size.width * lineNodeSecond.anchorPoint.x), y: lineNodeSecond.size.height / 2 - (lineNodeSecond.size.height * lineNodeSecond.anchorPoint.y))
lineNodeSecond.physicsBody = SKPhysicsBody(rectangleOf: lineNodeSecond.size, center: centerPointSecond)
lineNodeSecond.physicsBody?.isDynamic = true
lineNodeSecond.physicsBody?.categoryBitMask = 2
lineNodeSecond.physicsBody?.contactTestBitMask = 1
lineNodeSecond.physicsBody?.collisionBitMask = 0
self.addChild(lineNodeSecond)
}
我分享了我的应用程序的演示,其中包含基础知识。有关提高线移动速度的建议吗?
答案 0 :(得分:2)
我想不出一种在不增加所有线路速度的情况下加速线路的方法。如果没有增加所有线路的速度,你就会遇到线路间隙缩小的问题,否则你将不得不横穿屏幕上的所有线路并同时重新写入它们的动作。
你可以做的可能相当容易的是创建2个更大的面板,从上到下滚动你的场景,并在底部滚动页面时重置,创建一个滚动的背景。然后将条形应用于这些面板。你现在将具有向下移动屏幕的条形图的效果。当你想要提高游戏的速度时,你所要做的就是提高2个面板的速度。
在我的演示图片中,我添加了多种颜色,只是为了向您展示面板之间的间隔。但如果这些背景颜色被删除,你甚至不会意识到它是面板移动而不是条形;)
作为额外的奖励,您可以将面板创建为类,将条形图创建为类,并将条形图指定给面板。当需要将面板重置到顶部时,您可以将杆的2个内部开口点调整到新的间隙。这样你就不会动态地动态创建这些条。