Плюсы и минусы использования CCUIViewWrapper по сравнению с портированной функциональностью - PullRequest
4 голосов
/ 01 октября 2010

Я пытаюсь понять плюсы и минусы использования чего-то CCUIViewWrapper в Cocos2d по сравнению с портированной функциональностью.Например, было бы лучше использовать UITableView в CCUIViewWrapper или использовать CCTableViewSuite.На первый взгляд, я бы предположил, что оболочка является лучшим подходом, поскольку, по-видимому, он позволяет мне делать все, что предлагает UITableView, но есть ли ключевые детали, которые я упускаю?Существуют ли серьезные ограничения, которые существуют в оболочке, либо с использованием объекта Apple SDK, либо с невозможностью воспользоваться некоторыми функциями в Cocos2d, которые поставляются с портированным объектом, таким как CCTableView?

Ответы [ 2 ]

2 голосов
/ 20 ноября 2010

Я скопировал этот пост из здесь , что может помочь ответить на ваш вопрос. Я считаю, что было бы лучше использовать функции cocos2d с оболочками cocos2d, но вы можете реализовать с другими, которые просто не интегрируются.

Если есть какие-то новички (например, я), которым нужна дополнительная помощь по интеграции элемента UIKit с cocos2d, это может помочь. Как вы прочли в первом посте этой темы, Blue Ether написал оболочку для манипулирования UIViews. Что такое UIView? Посмотрите на http://developer.apple.com/iphone/library/documentation/uikit/reference/uikit_framework/Introduction/Introduction.html,, прокрутите немного вниз, и вы увидите диаграмму различных элементов UIView; такие вещи, как UIButton, UISlider, UITextView, UILabel, UIAlertView, UITableView, UIWindow и так далее. Их более 20. Вы можете использовать код Blue Ethas, чтобы обернуть любой из них внутри cocos2d. Здесь я заверну UIButton, но поэкспериментирую с вашим любимым выбором элемента UIView.

  1. Создайте новый проект Cocos 2d Application.

  2. Создайте новый файл NSObject и назовите его CCUIViewWrapper. Это даст вам файлы CCUIViewWrapper.h и CCUIViewWrapper.m. Отредактируйте (скопируйте и вставьте) их так, чтобы они выглядели так, как их определил Blue Ether (см. Первый пост в этой теме.

  3. Сделайте свой HelloWorld.h похожим на это

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

и ваш HelloWorld.m вот так

//  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

Построй и беги. Это должно произвести вращающуюся кнопку в середине сцены. Вы можете коснуться кнопки, пока она вращается. Он будет писать текстовое сообщение в консоли.

1 голос
/ 02 июня 2012

CCUIViewWrapper не является хорошим решением. Я попытался и удалил это. Проблема заключается в том, что он упаковывает элемент UIKit в контейнер и добавляет его в качестве представления для директора поверх основного представления openGL. Одна из проблем заключается в том, что вы не сможете добавить какой-либо другой спрайт поверх него. Очень ограниченный.

...