swift - 随着时间的推移增加物体的速度

swift - Increase speed of objects over time

我正在寻找一种方法来提高我的游戏节奏,你玩的时间越长,我想通过增加特定时间后(即每 30 秒或最好是之后)生成障碍物的频率来实现这一点已生成 10 个对象(树),因此您玩的时间越长,难度就越大。

这是我当前的设置,我使用 repeatActionForever 如何将其更改为类似 repeatAction10Times 的设置,每个循环都有不同的延迟变量?

//in didMoveToView

    treeTexture1 = SKTexture(imageNamed: "tree")
    treeTexture1.filteringMode = SKTextureFilteringMode.Nearest

    var distanceToMove = CGFloat(self.frame.size.width + 0.1);
    var moveTrees = SKAction.moveByX(-distanceToMove, y:0, duration:NSTimeInterval(0.006 * distanceToMove));
    var removeTrees = SKAction.removeFromParent();
    moveAndRemoveTrees = SKAction.sequence([moveTrees, removeTrees]);

    var spawn = SKAction.runBlock({() in self.spawnTrees()})

//this delay is what I would like to alter for each loop

    var delay = SKAction.waitForDuration(NSTimeInterval(1.2))

    var spawnThenDelay = SKAction.sequence([spawn, delay])
    var spawnThenDelayForever = SKAction.repeatActionForever(spawnThenDelay)
    self.runAction(spawnThenDelayForever)


func spawnTrees() {
    var tree = SKNode()
    tree.position = CGPointMake( self.frame.size.width + treeTexture1.size().width * 2, 0 );
    tree.zPosition = -10;

    var height = UInt32( self.frame.size.height / 1 )
    var height_max = UInt32( 220 )
    var height_min = UInt32( 100 )
    var y = arc4random_uniform(height_max - height_min + 1) + height_min;

    var tree1 = SKSpriteNode(texture: treeTexture1)
    tree1.position = CGPointMake(0.0, CGFloat(y))
    tree1.physicsBody = SKPhysicsBody(rectangleOfSize: tree1.size)
    tree1.physicsBody?.dynamic = false
    tree1.physicsBody?.categoryBitMask = treeCategory;
    tree1.physicsBody?.collisionBitMask = 0
    tree1.physicsBody?.contactTestBitMask = 0
    tree.addChild(tree1)



    tree.runAction(moveAndRemoveTrees)

    trees.addChild(tree)

}

您应该尝试使用简单的 action.speed 代码。

例如:与其 运行 将操作 spawnThenDelay 执行十次,然后 运行 执行一些代码并重复,不如尝试制作一个计数器。在名为 counter 的代码的最顶部创建一个全局变量,或者您想要调用它的任何名称。在 spawnTrees() 中,将代码更改为:

func spawnTrees() {
    var tree = SKNode()
    tree.position = CGPointMake( self.frame.size.width + treeTexture1.size().width * 2, 0 );
    tree.zPosition = -10;
    counter++

    ... }

然后在 update() 中检查计数器是否大于 10。

if counter == 10 {
     self.actionForKey("spawnThenDelayForever").speed += 10.0 // Or some integer/float like that
     counter = 0
}

现在,这将做的是 运行 if 语句中的代码,每 10 次你生成一些东西。但要做到这一点,您必须更新对 spawnAndThenDelayForever 的调用以添加一个键来引用它。

self.runAction(spawnThenDelayForever, withKey "spawnThenDelayForever")

让我知道我给你的内容是否有任何语法错误,或者它是否不正确。