Swift中带约束的SKSpriteNode的随机向下运动

Swift中带约束的SKSpriteNode的随机向下运动,swift,sprite-kit,Swift,Sprite Kit,我正在Swift操场上制作一款小型SpriteKit游戏,这是一款小行星防御类游戏。基本上,玩家是用加农炮保护飞船,并且必须摧毁接近的岩石。下面的图片链接是我没有添加枪的场景,但基本上我希望岩石从顶部慢慢向下移动到底部的航天器对不起,这里太大了,无法添加 岩石将是SKSpriteNodes,我想为每一个连续的岩石加速,随着时间的推移增加难度 我将如何实现这一点。我在其他地方看到了一些关于使用UIBezierPath的答案,但我如何使其随机,但有一个限制,即岩石只能从上面落下 提前谢谢 如果只需要

我正在Swift操场上制作一款小型SpriteKit游戏,这是一款小行星防御类游戏。基本上,玩家是用加农炮保护飞船,并且必须摧毁接近的岩石。下面的图片链接是我没有添加枪的场景,但基本上我希望岩石从顶部慢慢向下移动到底部的航天器对不起,这里太大了,无法添加

岩石将是SKSpriteNodes,我想为每一个连续的岩石加速,随着时间的推移增加难度

我将如何实现这一点。我在其他地方看到了一些关于使用UIBezierPath的答案,但我如何使其随机,但有一个限制,即岩石只能从上面落下


提前谢谢

如果只需要它们从上到下移动,而不需要任何特殊的曲线轨迹,那么就不需要处理样条曲线

让我们先讨论逐渐加速。你希望他们在比赛开始时慢慢下降,在比赛过程中加速。一种方法是根据经过的级别时间进行跟踪级别时间和持续时间计算。一个更简单的方法是缩短小行星到达底部所需的时间。在场景声明部分中,声明以下内容:

fileprivate let startingDuration: TimeInterval = 6.0  // Put here whatever value you feel fit for the level start falling speed
fileprivate let difficultyIncrease: TimeInterval = 0.05  // Put here whatever value you feel fit for how much should each next asteroid accelerate
fileprivate let collisionPosition = CGPoint(x: 300, y: 200)  // Put here the onscreen location where the asteroids should be heading to
fileprivate var asteroidCounter = 0  // Increase this counter every time you spawn a new asteroid
现在,让我们开始实际的小行星运动。有不同的方法来解决这个问题。苹果公司推荐的最简单的方法就是使用一个动作。将此代码添加到小行星繁殖方法:

// Implement here your spawning code ...
// It's best to choose random starting points (X axis) a bit higher than the upper screen boundary

let fallingDuration: TimeInterval = startingDuration - difficultyIncrease * TimeInterval(asteroidCounter)
let fallingAction = SKAction.move(to: collisionPosition, duration: fallingDuration)
asteroid.runAction(fallingAction)
如果需要生成随机整数的函数,请尝试以下操作:

func RandomInt(min: Int, max: Int) -> Int {
    return Int(arc4random_uniform(UInt32(max-(min-1)))) + min
}

问题太多…试着集中在一个特定的问题上。否则,您的问题可能会被关闭。还有一些关于你的问题的提示。。。若你们的岩石沿着直线运动,你们不需要贝塞尔路径。您可以使用操作来繁殖/移动/移除岩石。非常感谢!这正是我想要的。