gpt4 book ai didi

ios - 更改 SKAction.wait(forDuration : ) in sequence

转载 作者:行者123 更新时间:2023-11-30 11:11:23 25 4
gpt4 key购买 nike

我有这个。它运行了,但现在我必须将 forDuration: 10 更改为 5。在 Action 序列中,有 4 个 Sprite 在给定时间内移动其路径。运行序列后,我无法更改 forDuration: 10

有人可以帮助我吗?

let s1_1 = SKAction.run{let unit = S1(); unit.gegnerSpeed = 100; unit.moveAlongPath(self.pfadGegner);self.addChild(unit)}
let s1_2 = SKAction.run{let unit = S1(); unit.gegnerSpeed = 80; unit.moveAlongPath(self.pfadGegner);self.addChild(unit)}


let action1 = SKAction.sequence([
s1_1, SKAction.wait(forDuration: 10),
s1_2, SKAction.wait(forDuration: 10),
s1_1, SKAction.wait(forDuration: 10),
s1_2, SKAction.wait(forDuration: 10) ])
let sequenz = SKAction.sequence([action1, SKAction.run {
self.letzterGegnerLos = true
}])
run(SKAction.repeat(sequenz, count: 1))

非常感谢。

最佳答案

我不确定为什么你要在场景上运行 Action 来运行 Action ,你应该在特定节点上运行 Action 。但也就是说,一旦分配了一个序列,据我所知,您就无法更改其中的操作。这意味着您必须删除该序列,并分配具有新等待持续时间的新序列。

或者你呢?

在像您这样的情况下,可以操纵操作或节点的 speed 属性。要操纵操作的速度,您需要使用node.action(forKey:"key")提取操作。唯一的问题是您操纵序列内所有 Action 的速度。

相反,让我们更改节点的速度。

为此,我建议使用变量来分配速度:

let dSpeed = 1
let action1 = SKAction.sequence([

s1_1,
SKAction.run{[unowned self] in self.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{[unowned self] in self.speed = 1},
s1_2,
SKAction.run{[unowned self] in self.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{[unowned self] in self.speed = 1},
s1_1,
SKAction.run{[unowned self] in self.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{[unowned self] in self.speed = 1},
s1_2,
SKAction.run{[unowned self] in self.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{[unowned self] in self.speed = 1} ])
let sequenz = SKAction.sequence([action1, SKAction.run {
self.letzterGegnerLos = true
}])
run(SKAction.repeat(sequenz, count: 1))

当然,现在我们遇到了场景运行速度快的问题。这就是为什么我质疑你为什么在场景中运行东西。

从代码的外观来看,您需要一个生成节点来生成单位。让我们来创建它。

lazy var spawnNode = {
[unowned self] in
let node = SKNode()
self.addChild(node)
return node
}()

一旦您访问 spawnNode,它就会创建它并将其添加到场景中。

接下来,我们设置您的生成功能。

func spawn(_ speed:int)
{
let unit = S1()
unit.gegnerSpeed = speed
unit.moveAlongPath(self.pfadGegner)
self.addChild(unit)
}

最后,让我们设置您的操作

let s1_1 = SKAction.run{spawn(100)}
let s1_2 = SKAction.run{spawn(80)}
let dSpeed = 1
let action1 = SKAction.sequence([

s1_1,
SKAction.run{spawnNode.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{spawnNode.speed = 1},
s1_2,
SKAction.run{spawnNode.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{spawnNode.speed = 1},
s1_1,
SKAction.run{spawnNode.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{spawnNode.speed = 1},
s1_2,
SKAction.run{spawnNode.speed = dSpeed},
SKAction.wait(forDuration: 10),
SKAction.run{spawnNode.speed = 1} ])
let sequenz = SKAction.sequence([action1, SKAction.run {
self.letzterGegnerLos = true
}])
run(SKAction.repeat(sequenz, count: 1))

现在,如果我们希望节点生成速度提高两倍,我们可以设置dSpeed = 2。如果我们希望节点生成速度减慢两倍,我们可以dSpeed = 0.5。通过以这种方式执行此操作,我们不会以任何方式操纵场景的速度。

请注意,我在运行 block 之前和之后进行速度变化而不是 在序列的开头和结尾以防您需要执行任何动画。现在设置代码的方式是,run block 会立即触发,因此您可以在开始时设置 dSpeed,在最后设置 1。但是,如果由于某种原因,您在生成节点后立即放置移动操作,则该移动操作将使用生成节点的速度。因此,如果您只想执行运行 block ,那么这是可以接受的。

let action1 = SKAction.sequence([
SKAction.run{spawnNode.speed = dSpeed},
s1_1,
SKAction.wait(forDuration: 10),
s1_2,
SKAction.wait(forDuration: 10),
s1_1,
SKAction.wait(forDuration: 10),
s1_2,
SKAction.wait(forDuration: 10),
SKAction.run{spawnNode.speed = 1} ])
let sequenz = SKAction.sequence([action1, SKAction.run {
self.letzterGegnerLos = true
}])
run(SKAction.repeat(sequenz, count: 1))

关于ios - 更改 SKAction.wait(forDuration : ) in sequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52150769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com