cocos2d中的“scheduledTimerWithTimeInterval:”问题?

时间:2009-02-04 13:09:30

标签: cocoa-touch cocos2d-iphone

我正在尝试使用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];      
        }

}

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

不要使用NSTimer。查看cocos2d best practices

答案 2 :(得分:0)

我无法理解你的问题。你甚至没有在“问题”中使用过一个引号。

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

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

顺便说一下:那个循环看起来像一个无限循环。 (虽然可能是有效的......)

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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