永远重复行动,持续时间不同

时间:2015-02-17 14:05:10

标签: ios objective-c swift sprite-kit

我对Sprite Kit很陌生,我正试图开发一款游戏,其中一些怪物正在使用此代码永远移动。

    return SKAction.sequence([
        SKAction.runBlock({ self.moveMonster(monster) }),
        SKAction.waitForDuration(monster.movementSpeed())
    ])

事情是,我希望等待时间根据怪物速度而变化,这是一个函数。

此代码无法实现我尝试做的事情,因为 movementSpeed 函数只调用一次。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

在这种情况下,我不会使用某个动作。当计时器需要改变时,我认为使用更新方法更有意义。

向场景声明两个属性

var monsterTimer: NSTimerInterval(2)
var monsterInterval: NSTimerInterval(2)

在您的更新方法

self.monsterTimer -= self.delta

if self.monsterTimer <= 0 {

    self.moveMonster(monster)

    // change the value of monsterInterval if you need to change the delay
    self.monsterTimer = self.monsterInterval  
}

答案 1 :(得分:1)

您可以使用completionHandler中的runAction每次添加不同的SKAction sequence来更改wait duration。例如。

func addSKAction(waitDuration : NSTimeInterval)
{
    let moveSprite = SKAction.runBlock({ () -> Void in
        self.moveMonster(monster)
    })

    let waitDuration = SKAction.waitForDuration(waitDuration)

    let sequence = SKAction.sequence([moveSprite,waitDuration])

    spriteNode.runAction(sequence, completion: { () -> Void in

        addSKAction(waitDuration) // Change wait duration each time.

    })
}

每次更改waitDuration变量的值。

如果您只是想随机更改waitDuration,可以使用SKAction.waitForDuration:withRange:

let moveSprite = SKAction.runBlock({ () -> Void in
    self.moveMonster(monster)
})

let waitDuration = SKAction.waitForDuration(5, withRange: 4)

let sequence = SKAction.repeatActionForever(SKAction.sequence([moveSprite,waitDuration]))        

这会将waitDuration从(5 - 范围/ 2)= 3 随机更改为(5 +范围/ 2)= 7