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")
让我知道我给你的内容是否有任何语法错误,或者它是否不正确。
我正在寻找一种方法来提高我的游戏节奏,你玩的时间越长,我想通过增加特定时间后(即每 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")
让我知道我给你的内容是否有任何语法错误,或者它是否不正确。