【问题标题】:How do I implement framework function touchDown in a turnbased loop?如何在回合制循环中实现框架功能 touchDown?
【发布时间】:2019-12-21 12:56:48
【问题描述】:

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

我应该使用某种observer 还是#selector?两者都试过了,但可能只是因为我缺乏经验。如果我使用selector loop 不会暂停等待屏幕被点击。至于观察者,我只是不确定它是如何实现的。我还尝试将整个 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("\n????ENEMY IS DOING STUFF????")

            state = "PLAYER"
        }
    }
}

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

有什么想法吗?

【问题讨论】:

    标签: ios swift xcode cocoa-touch


    【解决方案1】:

    由于您在这里使用 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"
            })
        }
    

    【讨论】:

    • 啊,是的,我明白了。我在想它的另一种方式......有点。我完全理解你的意思,并且现在对如何实现它有一个很好的想法。感谢您抽出宝贵时间!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多