用定时器删除对象

时间:2011-07-25 02:27:18

标签: objective-c

我有两个NSMutableArrays,collectables和collectableViews。

我的应用程序包括一个角色四处移动并收集点数的收藏品(硬币,苹果,香蕉等)......

我希望收藏品在一段时间后消失。但是,我很困惑NSTimer在哪里放置模型/视图/控制器设计。

例如,如果我在每个模型中放置一个单独的计时器,模型不知道视图,也无法删除视图..

如果我把NSTimer放在控制器中,我需要制作另一个数组,其中包含屏幕上的所有可收集元素,按顺序首先到期。计时器的方法会每秒触发一次,并在到期时移除每个收集器。

有更简单,更好的方法吗?

2 个答案:

答案 0 :(得分:2)

大多数游戏使用一个或多个游戏时钟来模拟这种“状态监控”。你可以这样做:

  1. 创建包含持续时间,功能的数据结构 指针和对象变量数组。对于这个例子,我们打电话 它DecayEvent。
  2. 在你的前面(主要)创建一个静态的,可变的DecayEvent数组 控制器,有一些很好的访问方法
  3. 选择适当的事件处理间隔。它需要 大到足以处理你认为的最大事件数 将会,但足够小,不会阻碍用户体验。
  4. 在前端控制器上创建一个将要处理的方法 衰变事件的数组。每次调用该方法时都会 迭代数组并减少事件的持续时间 事件处理间隔。如果衰变事件持续时间低于 零,然后'触发事件'(基本上,触发其回调函数 在另一个线程中,使用回调参数)。
  5. 在主线程中创建NSTimer。设置它来打电话给你 每个事件处理间隔的处理方法。
  6. 你必须调整一下才能让一切按照你想要的方式工作,但上面的步骤通常会有效。

    祝你好运!

答案 1 :(得分:1)

您目前的情况是,您应该在控制器中保留计时器,因为控制器可以访问每个数据模式,并且您也可以访问阵列。另一种方法是使用NSNotificationCenter。首先尝试,如果这不起作用,请告诉我们。