Плюсы и минусы использования CCUIViewWrapper по сравнению с портированной функциональностью
Я пытаюсь понять плюсы и минусы использования чего-то CCUIViewWrapper в Cocos2d по сравнению с портированной функциональностью. Например, было бы лучше использовать UITableView в CCUIViewWrapper или использовать CCTableViewSuite. На первый взгляд, я бы предположил, что лучшим подходом является обертка, поскольку, по-видимому, она позволяет мне делать все, что предлагает UITableView, но есть ли ключевые детали, которые я упускаю? Существуют ли серьезные ограничения, которые существуют с оберткой, либо с фактическим использованием объекта Apple SDK, либо с невозможностью воспользоваться некоторыми функциями в Cocos2d, которые поставляются с портированным объектом, таким как CCTableView?
2 ответа
Я скопировал этот пост отсюда, который может помочь ответить на ваш вопрос. Я считаю, что было бы лучше использовать функции 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.
Создайте новый проект Cocos 2d Application.
Создайте новый файл NSObject и назовите его CCUIViewWrapper. Это даст вам файлы CCUIViewWrapper.h и CCUIViewWrapper.m. Отредактируйте (скопируйте и вставьте) их так, чтобы они выглядели так, как их определил Blue Ether (см. Первый пост в этой теме.
Сделайте так, чтобы ваш 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
Построй и беги. Это должно произвести вращающуюся кнопку в середине сцены. Вы можете коснуться кнопки, пока она вращается. Он будет писать текстовое сообщение в консоли.
CCUIViewWrapper не является хорошим решением. Я попытался и удалил это. Проблема заключается в том, что он оборачивает элемент UIKit в контейнер и добавляет его в качестве представления для директора поверх основного представления openGL. Одна из проблем заключается в том, что вы не сможете добавить любой другой спрайт поверх него. Очень ограничены.