运行 同时进行 2 个动作?游戏卡顿?
Run 2 actions simultaneously? Game freezes?
好的,我在这里尝试了一些不同的方法,但没有任何效果。
我有十几个精灵节点,每个节点都需要:
- 等待延迟
- 永远重复这个:
一个。向下移动屏幕,同时缩放到更大的尺寸(即这两个同时发生)
b。然后向上移动屏幕,同时缩小到原始大小(这些也同时发生)
通常我认为这将适用于一个序列并将缩放和移动动作分组为 2 个块,但它没有奏效。下面获取节点做一次一次:
block1.runAction(SKAction.runBlock({
self.block1.runAction(moveDownLeft)
self.block1.runAction(scaleBlock)
let nodelay = 0 * Double(NSEC_PER_SEC)
let notime = dispatch_time(DISPATCH_TIME_NOW, Int64(nodelay))
//during delay
dispatch_after(notime, dispatch_get_main_queue()) {
//after delay
self.block1.runAction(moveUpLeft)
self.block1.runAction(scaleBlockBack)
}
})
)
但是当我引入repeatActionForever
时,整个游戏都卡住了。
为什么我不能永远循环现有代码?我怎样才能 运行 同时执行这 2 个操作?
SKAction.group(_:)
并行运行多个 SKAction。
SKAction.waitForDuration(_:)
延迟。
结合使用这些来产生您想要的效果。你的 dispatch_after
电话是问题所在,虽然我不确定具体是什么。
你遇到的大问题是块不等待。它只是运行代码。所以发生的事情是你正在开始它到达块末尾的动作,并且因为你正在永远重复它即使动作没有完成它也会再次调用它。这导致该块被尽可能快地调用。
我不完全确定你希望在哪里延迟,但像这样的东西应该有用或者让你开始朝着正确的方向前进。
let delay = SKAction.waitForDuration(4.0) //whatever your delay is
let scaleDownGroup = SKAction.group([moveDownLeft, scaleBlock])
let scaleUpGroup = SKAction.group([moveUpLeft, scaleBlockBack])
let sequence = SKAction.sequence([scaleDownGroup, delay, scaleUpGroup])
let repeat = SKAction.repeatActionForever(sequence)
self.block1.runAction(repeat)
希望对您有所帮助。
好的,我在这里尝试了一些不同的方法,但没有任何效果。 我有十几个精灵节点,每个节点都需要:
- 等待延迟
- 永远重复这个:
一个。向下移动屏幕,同时缩放到更大的尺寸(即这两个同时发生)
b。然后向上移动屏幕,同时缩小到原始大小(这些也同时发生)
通常我认为这将适用于一个序列并将缩放和移动动作分组为 2 个块,但它没有奏效。下面获取节点做一次一次:
block1.runAction(SKAction.runBlock({
self.block1.runAction(moveDownLeft)
self.block1.runAction(scaleBlock)
let nodelay = 0 * Double(NSEC_PER_SEC)
let notime = dispatch_time(DISPATCH_TIME_NOW, Int64(nodelay))
//during delay
dispatch_after(notime, dispatch_get_main_queue()) {
//after delay
self.block1.runAction(moveUpLeft)
self.block1.runAction(scaleBlockBack)
}
})
)
但是当我引入repeatActionForever
时,整个游戏都卡住了。
为什么我不能永远循环现有代码?我怎样才能 运行 同时执行这 2 个操作?
SKAction.group(_:)
并行运行多个 SKAction。SKAction.waitForDuration(_:)
延迟。
结合使用这些来产生您想要的效果。你的 dispatch_after
电话是问题所在,虽然我不确定具体是什么。
你遇到的大问题是块不等待。它只是运行代码。所以发生的事情是你正在开始它到达块末尾的动作,并且因为你正在永远重复它即使动作没有完成它也会再次调用它。这导致该块被尽可能快地调用。
我不完全确定你希望在哪里延迟,但像这样的东西应该有用或者让你开始朝着正确的方向前进。
let delay = SKAction.waitForDuration(4.0) //whatever your delay is
let scaleDownGroup = SKAction.group([moveDownLeft, scaleBlock])
let scaleUpGroup = SKAction.group([moveUpLeft, scaleBlockBack])
let sequence = SKAction.sequence([scaleDownGroup, delay, scaleUpGroup])
let repeat = SKAction.repeatActionForever(sequence)
self.block1.runAction(repeat)
希望对您有所帮助。