首页 > 解决方案 > 请求输入:swift 8 位模拟器架构

问题描述

我正在使用 iOS 上的 Swift 创建一个 8 位计算机的模拟器。8 位计算机的屏幕有 25 行,每行有 40 个字符(即总共 1000 个字符),每个字符可以是 256 个不同字符中的 1 个(例如 A、B、C、1、2、3 等) . 8 位处理器每 5 微秒执行 1 条指令。

我创建了一个模拟 8 位 CPU 的函数(即每次调用它时执行一条指令)。我已经创建并显示了一个包含 1000 个 SKSpriteNode 的数组,我根据应该显示的字符在不同的纹理上进行交换。

问题:

  1. 是否有一种准确的方法可以每 5 微秒运行一次 CPU 功能,同时仍然有 SKSpiteNodes 更新?我尝试了以下几种变体:

1A:

serialQueue.asyncAfter(deadline: DispatchTime.now() + .microseconds(5)) {
  runCPU()
}

..但是这个时间不是很准确。

1B:

repeat {
  let runAt = DispatchTime.now() + .microseconds(5)
  var done = false
  repeat {
    if DispatchTime.now() >= runAt {
      runCPU()
      done = true
    }
  } while !done
} while true

..但是屏幕(SKSpriteNodes 的数组)可能永远不会更新,因为我在主队列上运行无限循环?

  1. 有没有比 1000 个 SKSpriteNodes 的数组更有效的方法来显示我的 1000 个字符并在我需要更新屏幕时更改纹理?

标签: iosswiftskspritenode

解决方案


推荐阅读