Реализация QR-ридера в движке cocos2d - PullRequest
3 голосов
/ 08 августа 2011

Пока я использую движок cocos2d для создания игры и хочу внедрить QR-ридер.

Пока я создал CCScene, у CCScene есть кнопка меню, и это приводит кМетод onScan:

-(void) onScan:(id)sender{
    // ADD: present a barcode reader that scans from the camera feed
    ZBarReaderViewController *reader = [ZBarReaderViewController new];
    reader.readerDelegate = self;

    ZBarImageScanner *scanner = reader.scanner;
    // TODO: (optional) additional reader configuration here

    // EXAMPLE: disable rarely used I2/5 to improve performance
    [scanner setSymbology: ZBAR_I25
                   config: ZBAR_CFG_ENABLE
                       to: 0];

    // present and release the controller
    [self presentModalViewController: reader
                            animated: YES];
    [reader release];
}

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

Любая помощь будетСпасибо!

Ответы [ 3 ]

0 голосов
/ 29 октября 2012

В cocos2d-iphone CCDirector является UIViewController.

Итак, просто сделайте это:

[[CCDirector sharedDirector] presentModalViewController:reader animated:YES]
0 голосов
/ 29 октября 2012
UIView* glView = [CCDirector sharedDirector].view;
UIView* window = glView.superview;

[window addSubview:reader.view];
0 голосов
/ 19 апреля 2012

Если вы пришли из типичного проекта cocos2d-iphone, который был создан с использованием шаблона Xcode, я думаю, у вас должен быть класс RootViewController в вашем приложении. Единственный экземпляр RootViewController создается в applicationDidFinishLaunching: в AppDelegate.m.

viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];

Вы можете каким-то образом сохранить глобальную ссылку вашего корневого UIViewController, например, для реализации метода класса в RootViewController:

static RootViewController *sharedInstance_ = nil;

@implementaion RootViewController

+ (RootViewController *)sharedInstance {
    if (!sharedInstance_) {
        sharedInstance_ = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    }
    return sharedInstance_;
}

и измените инициализацию в AppDelegate.m на:

viewController = [[RootViewController sharedInstance] retain];

затем используйте его для представления вашего UIViewController:

[[RootViewController sharedInstance] presentModalViewController:reader
                                     animated:YES];
...