0

我正在尝试使用 cocos2d 开发一个 iPhone 应用程序。我使用“scheduledTimerWithTimeInterval”来调用一个调用固定时间间隔的方法。但现在时间间隔逐渐增加。由于这个原因,时间逐渐变慢。这是我的代码:

- (void) methodTime: (id) sender{

    NSTimer *rat =[NSTimer scheduledTimerWithTimeInterval:(.5) target:self selector:@selector(rotation:) userInfo:nil repeats:YES]; 
}

- (void) rotation:(NSTimer *)theTimer{

    NSLog(@"I m  # %i", i);
    i=i+10;   // Here , i is a global int variable.
    i=i % 1440;
        if(i==0){
            [theTimer invalidate];

        }
        else {
         int rotationNum=i;
        Sprite *sp = [Sprite spriteWithFile: @"1.png"];
        sp.position=cpv(220,180.5);
        sp.rotation=rotationNum;
        [self add:sp];      
        }

}
4

5 回答 5

2

不要使用 NSTimer。查看cocos2d 最佳实践

于 2009-02-07T01:22:10.083 回答
2

看起来每 0.5 秒你就会将一个精灵添加到一些精灵列表中。最终列表变得非常大,所有这些数据导致您的方法执行时间超过 0.5 秒。这会导致计时器尽可能快地触发,但这并不是那么快,因为它总是在等待您的方法完成。

在不了解您的代码的情况下,这是我最好的猜测。

于 2009-02-05T11:07:16.487 回答
0

如果您所做的只是不断地旋转对象,那么 CATransforms 和 Core Animation 可能是更好的选择。

于 2009-02-04T16:02:20.403 回答
0

我很难理解你的问题。您甚至没有在“问题”中使用一个引号。

您的代码是否可能需要超过 0.5 秒才能执行?特别是因为在后台完成的工作量每次迭代都会增加。(更多精灵。)

尝试使此功能更快,例如将该 PNG 加载到内存中,并且不要每次都从文件中加载它。(无论如何,这对记忆更好。)

顺便说一句:那个循环看起来很危险,就像一个无限循环。(虽然可能是它的作品......)

于 2009-02-04T13:24:36.180 回答
0

我会使用 Cocos2d-iphone 的内置间隔。

通过演示 cocos 项目,您将看到在 cocos 框架中如何“应该”完成这样的事情。

于 2009-02-05T11:34:54.200 回答