我正在为iOS开发一个tic tac toe游戏,我正在使用UIButtons和UIImageViews的组合来允许用户交互并显示所做的移动。我的问题是按钮在cpu移动之前继续接受用户输入,这打破了我的游戏逻辑。我已多次尝试切换userInteractionEnabled属性,但我只能将其关闭。在游戏中启动所有内容的引擎是我的buttonPressed方法。我还在此方法中切换userInteractionEnabled属性,这就是我的问题:如何在禁用用户交互后重新启用该属性?是否有可以覆盖的事件之间调用的方法?
我搜索了网页,我搜索了Apple提供的开发者文档,我找到了有关touchesBegan和touchesEnded方法的信息。但是,根据我的理解,需要明确调用这些方法,这使我回到原来的问题,即在没有用户交互的情况下无法调用这些函数。
如果有人可以提供帮助,我将不胜感激!在过去的几个星期里,我一直在绞尽脑汁,我只是没有看到解决方案。
答案 0 :(得分:0)
我认为对于像tic-tac-toe这样的游戏,计算对策应该是如此之快以至于可以在第一次按下按钮时立即完成。如果你正在做一些复杂的事情来计算下一步行动,比如开始一个线程,你可能想重新考虑一下。
但是,让我们说,你的游戏类似于国际象棋或者去游戏,在那里提出反对可能会花费更长的时间。您的视图控制器应该有一个方法来为当前玩家进行移动,让我们称之为-makeMove:。您的-buttonPressed操作应该调用该方法为用户进行移动。作为回应,-makeMove:应该更新游戏状态,将当前玩家切换到下一个玩家。如果新的当前播放器是计算机,则它应该禁用控件并开始计算下一个移动的过程。让我们想象一下,通过调用一些NSOperation来完成,这样下一步的动作就是异步任务。一旦操作出现了移动,它应该再次调用-makeMove :(通过调用-performSelectorOnMainThread :),这将再次更新游戏状态和当前玩家。但是这一次,应该看到新的当前播放器不是计算机,因此它应该重新启用控件。