如何在回合制循环中实现框架功能 touchDown?

How do I implement framework function touchDown in a turnbased loop?

我正在使用一个简单的回合制循环,在玩家回合和敌人回合之间切换。在玩家回合中 loop 应该 "pause" 直到 framework function touchDown 被激活,然后将回合交给敌人。我不确定如何实现它,因为 touchDown 会在您按下屏幕时自动触发。

我是要使用某种 observer 还是 #selector?都尝试过,但都没有成功,但这可能只是因为我缺乏经验。如果我使用 selectorloop 不会暂停等待屏幕被点击。至于观察者,我只是不确定它是如何实现的。我还尝试将整个 touchDown 方法添加到玩家回合中,但这显然不起作用。

loop 看起来像这样:

var state = "PLAYER"
func runGame() {
    while(gameIsProgressing) {
        if(state == "PLAYER") {
            print("Player is doing stuff")

            //THE touchDown METHOD SOULD BE TRIGGERD HERE

            state = "ENEMY"

        }else if(state == "ENEMY") {
            print("\nENEMY IS DOING STUFF")

            state = "PLAYER"
        }
    }
}

此外,重要的是 touchDown 仅在玩家回合中触发,而不是在按下屏幕时触发。

有什么想法吗?

既然你在这里用 GUI 编程,你不应该以这种命令式的方式思考。没有(好的)方法可以 "pause" while 循环 "until" 事情发生了。您应该以更事件驱动的方式思考。

与其考虑 while 循环,不如考虑发生的事件。在这种情况下,事件是 touchDown。请注意,我不知道名为 touchedDown 的库函数(您是指 touchesBegan 还是针对 UIControl 的操作?),但我假设它存在。当玩家触摸屏幕时,你希望发生什么?嗯,大概是这样的:

    guard gameIsProgressing else { return }
    if(state == "PLAYER") {
        someFunctionThatShowsWhatThePlayerDid()

        state = "ENEMY"
        print("\nENEMY IS DOING STUFF")

        someFunctionThatMakesTheEnemyDoStuff(completion: {
            self.state = "PLAYER"
        })
    }