【问题标题】:repeat action forever with different durations以不同的持续时间永远重复动作
【发布时间】:2015-02-17 14:05:09
【问题描述】:

我是 Sprite Kit 的新手,我正在尝试开发一款游戏,其中一些怪物会使用此代码永远四处移动。

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

问题是我希望使用怪物速度来改变等待时间,这是一个功能。

这段代码没有实现我想要做的,因为 movementSpeed 函数只被调用了一次。

非常感谢您的帮助!

【问题讨论】:

  • 如果您希望等待操作对每个序列具有不同的持续时间,则必须在最后使用另一个 runBlock 创建一个新序列

标签: ios objective-c swift sprite-kit


【解决方案1】:

您可以使用runAction中的completionHandler每次添加不同的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 - range/2) = 3 随机更改为 (5 + range/2) = 7

【讨论】:

  • 非常感谢您的回答。你认为我应该坚持这种方式还是使用更新方法。我还是新手,不确定最佳做法。
  • 这完全取决于你的实现。实际上这两种方法都很好。
  • 我更喜欢那个解决方案,但是我在使用新的 motionSpeeds 获得正确的 waitDuration 时遇到了一些麻烦,它总是不同步,所以我选择了另一个答案
【解决方案2】:

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

为你的场景声明两个属性

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  
}

【讨论】:

  • 你好,我不确定增量,但我想我明白了整体的想法。我能做的是使用 update 方法的 currentTime 并做:如果(currentTime % SOMEDURATION = 0.0),你怎么看?
  • 不是一个好主意。在此处查看我的答案以获取有关 delta 的更多信息。与上一帧时间(增量)相比,跟踪当前帧的时间很重要。它很有用,因为您可以增加时间、创建流畅的动画等。看看这个:stackoverflow.com/questions/27696915/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多