我有两个从屏幕顶部相互平行的点,它们与底部的两个圆圈相匹配,可以通过触摸旋转。我有他们这样生成:
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(generateDots),
SKAction.waitForDuration(1.0)])))
}
func generateDots() {
let count = 2
let index=Int(arc4random_uniform(UInt32(count)))
let dots = SKSpriteNode(imageNamed: "Color\(index+1)")
dots.physicsBody = SKPhysicsBody(circleOfRadius: 10)
dots.physicsBody?.dynamic = true
dots.physicsBody?.affectedByGravity = false
for i in 0..<2 {
dots.physicsBody?.categoryBitMask = UInt32(0x1 << index)
dots.physicsBody?.contactTestBitMask = UInt32(0x1 << index)
}
addChild(dots)
dots.size = CGSizeMake(45, 45)
dots.position = CGPointMake(150, 400)
dots.runAction(
SKAction.moveByX(0, y: -900,
duration: NSTimeInterval(11.5)))
}
}
有没有办法逐步加快它们下降的速度或逐渐改变waitForDuration
,以便随着时间的推移它会每3秒生成一个节点,然后是2秒,然后是1秒等等?
答案 0 :(得分:1)
这是完全可行的!你只需要添加一些变量。
如果你想改变它们下降的速度,你需要制作一个像
这样的变量Var droptime:NSTimeInterval = 11.5
然后在你的&#34; dropdot()&#34;方法你需要做两件事。
在开头减去或删除你的droptime变量,如...
Droptime - = 1
然后在生成下降动作结束时将其设为
持续时间:停机时间
而不是以前的样子。
如果你想让生成时间更短,那么你需要创建一个函数,你可以在每次想要进行场景运行的动作时触发(就像你在viewdidload中所做的那样)并编辑它以便它有变量等待并触发自身。此外,您需要在didMoveToView方法中自行触发一次。
func controlMethod() {
waitdur -= 1
runAction(SKAction.repeatActionForever( SKAction.sequence([
SKAction.runBlock(generateDots),
SKAction.waitForDuration(waitdur),
SKAction.runBlock(controlMethod)
])))
}
祝你好运!
很抱歉格式化!我在手机上...希望有人能解决它。