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

标签 ios swift xcode cocoa-touch

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

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

循环看起来像这样:

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("\n🙈ENEMY IS DOING STUFF🙈")

            state = "PLAYER"
        }
    }
}

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

有什么想法吗?

最佳答案

既然你在这里用 GUI 编程,你不应该以这种命令式的方式思考。没有(好的)方法可以“暂停”while 循环“直到”某事发生。您应该以更加事件驱动的方式思考。

与其考虑 while 循环,不如考虑发生的事件。在本例中,事件是 touchDown。请注意,我不知道名为 touchedDown 的库函数(您是说 touchesBegan 还是这是 UIControl 的操作?),但我会假设它存在。当玩家触摸屏幕时,你希望发生什么?好吧,可能是这样的:

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

        state = "ENEMY"
        print("\n🙈ENEMY IS DOING STUFF🙈")

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

关于ios - 如何在回合制循环中实现框架功能 touchDown?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57503647/

相关文章:

iphone - iOS:[imagePickerController.cameraOverlayView addSubview:] 不工作

ios - 如何从现有的 Xcode 项目中删除 Apple Watch 应用程序?

swift - 自 SearchBar 实现以来 Xcode 9.4.1 TableView 问题

ios - Xcode 调试 View 层次结构显示空白屏幕

objective-c - @throw 之后保留计数耗尽

ios - 从模态转换返回后如何重置我的 UIScrollView 的位置?

ios - Swift1.2中可空性注释的默认值是多少

ios - BarButtonItems 是如何添加到 NavigationBar 的?

string - 如何在 swift 3.0 中连接多个可选字符串?

ios - 自定义过渡