游戏循环未在swift 3中运行

游戏循环未在swift 3中运行,swift,swift3,core-graphics,Swift,Swift3,Core Graphics,我想在swift 3中创建一个游戏循环。我可以让代码在没有错误的情况下运行,但是循环没有运行。我已经尝试移动到我声明更新程序的地方,但这似乎只会导致错误 代码: import UIKit import QuartzCore class Circle: UIView { @IBOutlet var updater: CADisplayLink! var x: CGFloat = 0 var y: CGFloat = 0 var b: Board!

我想在swift 3中创建一个游戏循环。我可以让代码在没有错误的情况下运行,但是循环没有运行。我已经尝试移动到我声明更新程序的地方,但这似乎只会导致错误

代码:

import UIKit
import QuartzCore 

class Circle: UIView {


    @IBOutlet var updater: CADisplayLink!
    var x: CGFloat = 0
    var y: CGFloat = 0
    var b: Board!


    override func draw(_ rect: CGRect) {
        UIColor.black.set()
        let updater = CADisplayLink(target: self, selector: #selector(Circle.gameLoop))
        updater.add(to: RunLoop.current, forMode: RunLoopMode.commonModes)
        updater.preferredFramesPerSecond = 1
        b = Board(frameWidth: self.frame.width)
        b.createGrid().stroke()
    }

    func gameLoop(){
        b.moveDown(x: x, y: y).stroke()
        y = y + 1

    }

}

我没有为Board添加代码,但是我已经测试过了,它运行得很好。如果你想让我添加它,请给我留言,我会的。但是,我认为这对解决方案没有好处。

您确定gameLoop没有运行吗?您是否尝试记录它?在进一步的测试中,我相当确定循环正在运行。问题可能在于gameLoop中的
.stroke
。我想它不知道该拿什么作依据。我不是这方面的专家,但在某个视图子类的
draw(:)
方法中创建
CADisplayLink
似乎真的很奇怪,因为它不存储在任何地方的属性中。另外,您正在那里创建一个
图板
,但不要将其添加到任何superview中,这样它就不会被绘制。我猜你是在尝试创建一个游戏,但这是一个非常奇怪的UIKit用法。你看过SpriteKit吗?它可能更适合你的目标。