2011-03-07 44 views
1

我正在开发针对iOS的tic tac toe游戏,我正在使用UIButtons和UIImageViews的组合来允许用户进行交互并显示所做的动作。我的问题是,在CPU移动之前,按钮继续接受用户输入,这打破了我的游戏逻辑。我做了几次尝试切换userInteractionEnabled属性,但我只能关闭它。获取所有内容的引擎是我的buttonPressed方法。我还切换此方法中的userInteractionEnabled属性,其中存在我的问题:禁用用户交互后,如何重新启用属性?是否有可以覆盖的事件之间调用的方法?无法在iOS中切换userInteractionEnabled属性

我已经在网上搜索,我已经通过苹果公司提供的开发者文档搜索,我发现对信息的touchesBegan和touchesEnded方法。然而,据我所知,这些方法需要明确调用,这使我回到了原来的问题,即无法在没有用户交互的情况下调用这些函数。

如果有人能帮助,我将不胜感激!在过去的几周里,我一直在关注这个问题,而我只是没有看到解决方案。

回答

0

我会认为像井字棋游戏,计算对策应该是如此之快,它可以响应按下第一个按钮立即进行。如果你正在做一些复杂的事情来计算下一步行动,比如踢开一条线索,你可能想重新考虑一下。

但是,让我们假设你的游戏是象棋或去的地方,但想出一个反冲动可能需要更长的时间。您的视图控制器应该有一个方法来为当前播放器进行移动,我们称之为-makeMove :.您的按钮压缩操作应该调用该方法来为用户做出移动。作为回应,-makeMove:应该更新游戏状态,将当前玩家切换到下一个玩家。如果新的当前玩家是电脑,那么它应该禁用这些控件并开始计算下一步棋的过程。让我们想象这是通过调用一些NSOperation完成的,所以下一步移动是一个异步任务。一旦操作产生了移动,它应该再次调用-makeMove :(通过调用-performSelectorOnMainThread :),它将再次更新游戏状态和当前玩家。但是这一次,它应该看到新的当前播放器不是电脑,所以它应该重新启用控件。

+0

Caleb,谢谢你的建议。我想我应该多解释我的设置。我调用performSelector:withObject:afterDelay:延迟绘制计算机的移动。问题是,标志我用它来确定它是否是计算机的转弯或计算机计算出它的举动后,玩家的回合被翻转。所以我对你的建议有类似的设置,但似乎并不奏效。在performSelector调用后,我尝试更改标志,但用户仍然能够在计算机的移动被绘制之前点击并更新电路板。执行选择器工作切换输入? – mblPrgr 2011-03-07 20:30:09