目前,我正在使用纯UIKit构建一个简单的游戏。在我的游戏内容MVC中,我有一个在游戏中激活的CADisplayLink计时器对象,并且反复调用gameLogic方法来显示新对象。该方法计算并更新屏幕上的对象位置。我的定时器的frameInterval是2帧。现在,我需要以某种方式为屏幕上的新对象重复出现设置间隔。到目前为止我使用的解决方案是在gameLogic方法中使用静态计数器。以下是该方法的一个片段:
-(void)gameLogic{
static int timeCounter = 0;
if ((timeCounter % 50)==0){
[self addItemToScreen];
}
...
timeCounter++;
在gameLogic方法执行的每第50个周期,我在屏幕上放置一个新对象。 gameLogic方法的其余代码重新定位现有对象。目前,一切都只由一个计时器管理。恕我直言应该工作的另一个解决方案是有一个单独的计时器,用于在屏幕上添加新对象。但我不确定,这是一个更好的解决方案,并且它们会同时成功运作。您对这些方法有何看法?您建议使用哪些其他解决方案?
答案 0 :(得分:1)
我认为让所有对象响应帧计数器是件好事。但是,我可能会在您的应用程序中发送通知,而不是让一个函数包含大量代码,执行各种操作。我认为你真的应该考虑将所有逻辑拆分成单独的类,即有一个GameObjectCreator类响应你的计时器触发时发布的通知,并且只有该类将对象添加到视图中。对于重新排列屏幕上对象的代码,它们也可以响应相同的通知,并由父控制器处理以操纵所有对象,或者每个单独的对象也可以响应通知。性能方面我不确定使用通知是否很糟糕,很多对象同时响应,但是这样的事情更多的是我采取的方法,所以你没有在一个单一的计时器函数中拥有所有这些意大利面条代码。