swift - 同时运行 2 个 Action ?游戏卡顿?

标签 swift sprite-kit

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

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

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

然后向上移动屏幕,同时缩小到原始大小(这些也同时发生)

通常我认为这将适用于一个序列并将缩放和移动 Action 分组为 2 个 block ,但它没有奏效。以下命令让节点执行一次:

 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 个操作?

最佳答案

你遇到的大问题是 block 不等待。它只是运行代码。所以发生的事情是你正在开始它到达 block 末尾的 Action ,并且因为你正在永远重复它即使 Action 没有完成它也会再次调用它。这导致该 block 被尽可能快地调用。

我不完全确定您希望在哪里延迟,但像这样的事情应该会起作用或让您朝着正确的方向开始。

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)

希望对您有所帮助。

关于swift - 同时运行 2 个 Action ?游戏卡顿?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30158101/

相关文章:

ios - 如何禁用 subview 后面的用户交互?

swift - 使用 Swift2 从 AppDelegate 重新打开 iOS 应用程序到指定的导航 Controller

swift - 仅过滤距离数据库最近的位置

iphone - 使用 Sprite Kit 粒子的 iOS 烟花爆炸

ios - SpriteKit SKNode 不与边缘碰撞

ios - SKSpriteNode定位

swift - 无法将 "inout CGAffineTransform"类型的值转换为预期参数

swift - 如何使我的相机节点聚焦在点击的节点上? (场景工具包)

arrays - 排序数组和对应数组

ios - 如何在 SpriteKit SKScene 类中启动 ReplayKit 屏幕录制