繁体   English   中英

SpriteKit提高了移动动作的速度

[英]SpriteKit increasing speed of move action

我有一个简单的游戏,两条线从屏幕的顶部到底部移动。 这两条线之间有一个固定的空间,球必须穿过那个空间,否则游戏结束。

我对游戏的基础没有任何问题,我可以添加两条线,每次都有不同位置的空间,但我也想提高线条的移动速度。 我试图使用一个计时器并增加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)

}

我分享了我的应用程序的演示,其中包含基础知识。 有什么建议提高线的移动速度?

演示视频

我想不出一种在不增加所有线路速度的情况下加速线路的方法。 如果没有增加所有线路的速度,你就会遇到线路间隙缩小的问题,否则你将不得不横穿屏幕上的所有线路,同时重新编写动作。

你可以做的更容易的是创建2个更大的面板,从上到下滚动你的场景,并在底部滚动页面时重置,创建一个滚动的背景。 然后将条形应用于这些面板。 你现在将具有向下移动屏幕的条形图的效果。 当你想要提高游戏的速度时,你所要做的就是提高2个面板的速度。

在我的演示图像中,我添加了多种颜色,只是为了向您展示面板之间的间隔。 但如果这些背景颜色被删除你甚至不会意识到它是面板移动而不是条形;)

作为一个额外的好处,您可以将面板创建为类,将条形图创建为类,并将条形图指定给面板。 当需要将面板重置到顶部时,您可以将杆的2个内部开口点调整到新的间隙。 这样您就不会动态地动态创建这些条。

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM