我正在Swift游乐场制作一个小型SpriteKit游戏,它是一种小行星防御型游戏。基本上,玩家用大炮保卫航天器并且必须摧毁接近的岩石。下面的图像链接是我没有添加枪的场景,但基本上我希望岩石从顶部向下缓慢向下移动到底部的航天器(对不起,它太大了,不能在这里添加)。
https://www.dropbox.com/s/pisgazar4jaxra0/Screenshot%202017-03-18%2011.23.17.png?dl=0
岩石将是SKSpriteNodes,我希望为每个连续的岩石加速它们,以增加难度。
我如何能够实现这一点。我在其他地方看到了一些关于使用UIBezierPaths的答案,但是我如何使它随机但是只有岩石从上面掉下来的约束?
提前致谢!
答案 0 :(得分:1)
如果你只需要它们从上到下没有任何特殊的弯曲轨迹,那么你就不需要处理样条曲线。
让我们首先解决逐步加速问题。你希望它们在开始时缓慢下降并在游戏进程中加速。一种方法是跟踪等级时间并根据经过的等级时间进行一些持续时间的数学运算。更容易的是减少小行星到达底部所花费的时间。在场景声明部分中,声明:
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
现在,让我们来看看实际的小行星运动。有不同的方法来处理它。 Apple推荐的最简单的方法就是使用一个动作。将此代码添加到您的小行星生成方法:
// 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
}