2009-02-04 7 views
0

J'essaie de développer une application iPhone en utilisant cocos2d. J'utilise "scheduledTimerWithTimeInterval" pour appeler une méthode qui a appelé un intervalle de temps fixe. Mais maintenant, l'intervalle de temps augmente progressivement. pour cette raison, le temps est lent progressivement. voici mon code:"scheduledTimerWithTimeInterval:" problème dans cocos2d?

- (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];  
     } 

} 

Répondre

0

J'ai eu du mal à comprendre votre question. Vous n'avez même pas utilisé un guillemet dans votre «question».

Est-il possible que votre code nécessite plus de 0,5 seconde pour s'exécuter? Surtout parce que la quantité de travail effectuée en arrière-plan augmente chaque itération. (Plus sprites.)

Essayez d'accélérer cette fonction, par exemple, chargez ce fichier PNG en mémoire et ne le chargez pas à chaque fois à partir du fichier. (C'est mieux pour la mémoire quand même.)

Btw: Cette boucle ressemble dangereusement à une boucle infinie. (Bien que cela puisse être que cela fonctionne ...)

0

Si tout ce que vous faites est de faire tourner continuellement l'objet, CATransforms et Core Animation pourraient être un meilleur pari.

2

Il semble que toutes les 0,5 secondes vous ajoutez une image-objet à une liste de sprites. Finalement, la liste devient très grande et toutes ces données font que votre méthode prend plus de 0,5 secondes à exécuter. Cela fait que la minuterie se déclenche rapidement, ce qui n'est pas si rapide car elle attend toujours que votre méthode soit terminée.

Sans en savoir plus sur votre code, c'est ma meilleure estimation.

0

J'utiliserais les intervalles intégrés de Cocos2d-iphone. Passez en revue le projet demo cocos et vous verrez comment des choses comme cela «devraient» être faites dans le cadre de cocos.