mercoledì 29 giugno 2011

Cocos 2D - gestione del tocco dell'utente, azioni e cambio di immagini dinamico.

Per gestire il "tocco" dell'utente è necessario aggiungere dei delegati tramite lo shareddispatcher ed il metodo addTargetedDelegate. SwallowsTouches se è impostato su true impedisce la propagazione degli eventi ad oggetti che sono posizionati al di sotto.

Fondamentale ricordarsi di richiamare i metodi super sia in entrata che in uscita altrimenti molte cose non funzioneranno come previsto.

-(void)onEnter {
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:TRUE];
[super onEnter];
}
In uscita è buona norma rimuoverlo attraverso il metodo removeDelegate.
-(void)onExit{
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];
[super onExit];
}

Il set di azioni è tra gli strumenti più comodi che cocos2d fornisce. L'utilizzo è semplice e rapido.

[labelimg runAction:[CCTintTo actionWithDuration:tempo red:230 green:231 blue:232]];

Ecco alcune delle azioni disponibili

    Move actions
  • CCMoveTo
  • CCMoveBy
  • CCJumpBy
  • CCBezierTo
  • CCBezierBy
  • CCPlace
    Scale actions
  • CCScaleTo
  • CCScaleBy
    Rotation actions
  • CCRotateTo
  • CCRotateBy
    Visible actions
  • CCShow
  • CCHide
  • CCToggleVisibility
  • CCBlink
    Opacity actions
  • CCFadeIn
  • CCFadeOut
  • CCFadeTo
    Colour actions
  • CCTintTo
  • CCTinyBy

Ulteriori effetti sono applicabili tramite l'utilizzo delle azioni che agiscono sulla grid. Ulteriori informazioni sul blog ufficiale di cocos2d.

È possibile combinare tra loro azioni con CCSequence, oppure assegnare un movimento particolare agli oggetti tramite l'utilizzo di ease action

CCAction *action = CCEaseOutSine actionWithAction:[CCMoveTo actionWithAction:[CCMoveTo actionWithDuration:1 position:ccp(300,300)]];
[sprite runAction:action];

Infine CCCallFunc permette di richiamare funzioni alla fine, all'inizio di una azione

[ready runAction:[CCSequence actions:
[CCDelayTime actionWithDuration:1],
[CCSpawn actions: [CCFadeIn actionWithDuration:0.4], [CCScaleTo actionWithDuration:0.4 scale:1.2],nil],
[CCDelayTime actionWithDuration:0.2],
[CCFadeOut actionWithDuration:0.4],
[CCCallFuncN actionWithTarget:self selector: @selector(removeSprite:)],nil]];

Per cambiare dinamicamente le immagini è sufficente questa riga:

[sprite setTexture:[[CCTextureCache sharedTextureCache]addImage:_path_img]];