2010-06-21 2 views
4

J'essaie de créer un élément CCMenuItem dont les images ont été mises à l'échelle. Par exemple, j'ai essayé:Mise à l'échelle d'un élément CCMenuItem dans Cocos2d (Objective-C)

CCSprite* normalSprite = [CCSprite spriteWithFile:@"button_play.png"]; 
CCSprite* selectedSprite = [CCSprite spriteWithFile:@"button_play.png"]; 
selectedSprite.scale = 1.2; 

CCMenuItem menuItem = [CCMenuItemSprite 
         itemFromNormalSprite:normalSprite 
         selectedSprite:selectedSprite 
         target:self 
         selector:@selector(onPlay:)]; 

Mais il semble que CCMenuItemSprite ne tient pas compte de l'ampleur des sprites sous-jacents. Existe-t-il un moyen de le faire (à part de simplement créer des versions mises à l'échelle des images sous-jacentes)? Merci.

Répondre

0

Non, il n'y en a pas d'autre. Le fait est que menuItem ne reconnaît que la partie des fichiers des sprites. Il ne regarde pas d'autres propriétés telles que la propriété scale.

4

Thyrgle est correct sur le fonctionnement de CCMenuItem.

Cependant, il existe certainement un moyen de faire ce que vous voulez. Tout ce que vous devez faire est sous-classe CCMenuItem et remplacer les méthodes sélectionnées et non sélectionnées pour atteindre ce que vous voulez. En fait, je suis sûr que vous pouvez simplement couper et coller le code de CCMenuItemLabel, car la mise à l'échelle de l'élément en 1.2 est exactement ce qu'il fait. (En fait, elle le fait mieux, puisqu'il anime le changement d'échelle.)

-(void) selected 
{ 
    // subclass to change the default action 
    if(isEnabled_) {  
     [super selected]; 
     [self stopActionByTag:kZoomActionTag]; 
     CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:1.2f]; 
     zoomAction.tag = kZoomActionTag; 
     [self runAction:zoomAction]; 
    } 
} 

-(void) unselected 
{ 
    // subclass to change the default action 
    if(isEnabled_) { 
     [super unselected]; 
     [self stopActionByTag:kZoomActionTag]; 
     CCAction *zoomAction = [CCScaleTo actionWithDuration:0.1f scale:1.0f]; 
     zoomAction.tag = kZoomActionTag; 
     [self runAction:zoomAction]; 
    } 
} 
Questions connexes