运行 同时进行 2 个动作?游戏卡顿?

Run 2 actions simultaneously? Game freezes?

好的,我在这里尝试了一些不同的方法,但没有任何效果。 我有十几个精灵节点,每个节点都需要:

  1. 等待延迟
  2. 永远重复这个:

一个。向下移动屏幕,同时缩放到更大的尺寸(即这两个同时发生)

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)

希望对您有所帮助。