ios - How to stop cocos2d accumulating animation delta -
i have weird situation if app goes background , comes foreground animations accumulated somehow , applied super fast. e.g. ccrotateby catches time app in background , spins sprites fast.
my app delegate has correct application state handling think..
- (void)applicationwillresignactive:(uiapplication *)application { [[ccdirector shareddirector] pause]; } - (void)applicationdidbecomeactive:(uiapplication *)application { [[ccdirector shareddirector] resume]; [[oalaudiosession sharedinstance] forceendinterruption]; } - (void)applicationdidreceivememorywarning:(uiapplication *)application { [[ccdirector shareddirector] purgecacheddata]; } -(void) applicationdidenterbackground:(uiapplication*)application { [[ccdirector shareddirector] stopanimation]; } -(void) applicationwillenterforeground:(uiapplication*)application { [[ccdirector shareddirector] startanimation]; [[oalaudiosession sharedinstance] forceendinterruption]; } - (void)applicationwillterminate:(uiapplication *)application { ccdirector *director = [ccdirector shareddirector]; [[director view] removefromsuperview]; [director end]; } - (void)applicationsignificanttimechange:(uiapplication *)application { [[ccdirector shareddirector] setnextdeltatimezero:yes]; }
what causing happen?
its 1 of problem face cocos2d 2.0.
temp_fix: used manual pause animation.
-(void) applicationwillresignactive:(uiapplication *)application { [[nsnotificationcenter defaultcenter] postnotificationname:@"appenterbackground" object:nil]; if( [navcontroller_ visibleviewcontroller] == director_ ) [director_ pause]; } //in game layer -(void)onenter { [super onenter]; [[nsnotificationcenter defaultcenter] addobserver:self selector:@selector(appenterbackground:) name:@"appenterbackground" object:nil]; } -(void)onexit { [[nsnotificationcenter defaultcenter] removeobserver:self name:@"appenterbackground" object:nil]; [super onexit]; } -(void)appenterbackground:(nsnotification*)notif { [self pauseschedulerandactions]; [mhero pauseschedulerandactions]; for(mycoin *coin in mcoinarr) { [coin pauseschedulerandactions]; } }
similar way can resume.
Comments
Post a Comment