2010-10-01 2 views
4

J'essaie de comprendre les avantages et les inconvénients de l'utilisation de CCUIViewWrapper dans Cocos2d par rapport à une fonctionnalité portée. Par exemple, serait-il préférable d'utiliser UITableView dans un CCUIViewWrapper, ou d'utiliser CCTableViewSuite. À première vue, je dirais que l'encapsulation est la meilleure approche puisqu'elle me permet probablement de faire tout ce qu'offre UITableView, mais y a-t-il des détails clés qui me manquent? Y a-t-il de sérieuses limitations avec l'encapsuleur, soit avec l'utilisation de l'objet Apple sdk, soit avec l'impossibilité de tirer parti de certaines fonctionnalités de Cocos2d fournies avec un objet porté comme CCTableView?Avantages et inconvénients de l'utilisation de CCUIViewWrapper par rapport à une fonctionnalité portée

Répondre

2

J'ai copié cet article de here qui pourrait aider à répondre à votre question. Je crois qu'il vaudrait mieux utiliser les fonctions cocos2d avec les wrappers cocos2d, mais vous pouvez les implémenter avec d'autres.

S'il y a des débutants (comme moi-même) qui ont besoin d'aide pour intégrer un élément UIKit avec cocos2d, cela pourrait aider. Comme vous l'avez lu dans le premier post de ce fil Blue Ether a écrit un emballage pour manipuler UIViews. Qu'est-ce qu'un UIView? Regardez http://developer.apple.com/iphone/library/documentation/uikit/reference/uikit_framework/Introduction/Introduction.html, faites défiler vers le bas un peu et vous verrez un diagramme des différents articles UIView; des choses comme UIButton, UISlider, UITextView, UILabel, UIAlertView, UITableView, UIWindow et ainsi de suite. Il y en a plus de 20. Vous pouvez utiliser le code Ethas bleu pour envelopper n'importe lequel d'entre eux à l'intérieur de cocos2d. Ici, je vais envelopper un UIButton, mais expérimenter avec votre choix préféré de l'élément UIView.

  1. Créez un nouveau projet d'application Cocos 2d.

  2. Créez un nouveau fichier NSObject et appelez-le CCUIViewWrapper. Cela vous donnera les fichiers CCUIViewWrapper.h et CCUIViewWrapper.m. Modifier (par copier coller) afin qu'ils les regardent comme bleu Ether les a définis (voir le premier post dans ce fil.

  3. Faites vos HelloWorld.h ressemblent à ce

    // HelloWorldLayer.h 
    
    #import "cocos2d.h" 
    
    #import <UIKit/UIKit.h> 
    
    #import "CCUIViewWrapper.h" 
    
    @interface HelloWorld : CCLayer 
    
    { 
        UIButton *button; 
        CCUIViewWrapper *wrapper; 
    } 
    +(id) scene; 
    @end 
    

et votre HelloWorld.m comme celui-ci

// HelloWorldLayer.m 

    #import "HelloWorldScene.h" 

// HelloWorld implementation 
@implementation HelloWorld 

+(id) scene 
{ 
    CCScene *scene = [CCScene node]; 
    HelloWorld *layer = [HelloWorld node]; 
    [scene addChild: layer]; 
    return scene; 
} 

-(void)buttonTapped:(id)sender 
{ 
    NSLog(@"buttonTapped"); 
} 

// create and initialize a UIView item with the wrapper 
-(void)addUIViewItem 
{ 
    // create item programatically 
    button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self action:@selector(buttonTapped:) forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Touch Me" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(0.0, 0.0, 120.0, 40.0); 

    // put a wrappar around it 
    wrapper = [CCUIViewWrapper wrapperForUIView:button]; 
    [self addChild:wrapper]; 
} 

-(id) init 
{ 
    if((self=[super init])) { 
     [self addUIViewItem]; 

     // x=160=100+120/2, y=240=260-40/2 
     wrapper.position = ccp(100,260); 
     [wrapper runAction:[CCRotateTo actionWithDuration:4.5 angle:180]]; 
    } 
    return self; 
} 

- (void) dealloc 
{ 
    [self removeChild:wrapper cleanup:true]; 
    wrapper = nil; 
    [button release]; 
    button=nil; 
    [super dealloc]; 
} 
@end 

créer et exécuter. cela devrait produire un bouton de rotation au milieu de la scène. Vous pouvez appuyer sur le bouton pendant qu'il tourne. il va écrire un message texte dans la console.

1

CCUIViewWrapper n'est pas une bonne solution. J'ai essayé et enlevé. Le problème est qu'il enveloppe l'élément UIKit dans un conteneur et l'ajoute en tant que vue sur le directeur sur la vue principale d'openGL. Un problème avec cela est que vous ne serez pas en mesure d'ajouter une autre image-objet sur le dessus. Très limité.

+0

Salut RubberDuck qu'est-ce que vous préférez au lieu de CCUIViewWrapper? Merci – yatanadam

+0

La meilleure option est de créer vos propres contrôles en utilisant cocos, au lieu d'utiliser UIKIT. – SpaceDog

Questions connexes