这几天在研究cocos2d-x中调用摄像头的功能。
cocos2d-x本身没有这个功能,只能调用原声代码实现。这就涉及到了c++和OC混编码。网上找了好久,都没有什么靠谱的例子。大多数都是下面这种
-(id) init
{
if( (self=[super init] )) {
CCMenuItem *menuItem1 = [CCMenuItemImage itemFromNormalImage:@"phone_nor.png"
selectedImage:@"phone_pre.png"
target:self
selector:@selector(getPhoto:)];
CCMenu *menu = [CCMenu menuWithItems:menuItem1,nil];
[menu setPosition(40, 40)];
[self addChild:menu];
}
return self;
}
-(void)getPhoto:(UIImagePickerControllerSourceType)sourceType{
UIImagePickerController *picker = [[UIImagePickerController alloc]init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.wantsFullScreenLayout = YES;
[picker presentModalViewController:picker animated:YES];
[[[CCDirector sharedDirector] openGLView] addSubview:picker.view];
}
写的不清不楚。最重要的就是这条
picker.delegate = self;
这个self不是坑爹么。按照我的理解,这个代码绝对是要写到cocos2d的scene或者layer类中。self就是node的子类。怎么可能做代理?????
后来好不容易找到http://www.cnblogs.com/hanhongmin/p/3498102.html这个教程,才算是豁然开朗。
下面详细记录下我的代码。争取让大部分新手也可以看懂
首先看文件结构
注意,这个HelloWorldScene必须是.mm后缀的,因为只有.mm后缀的文件,才可以既写cpp的代码,又写oc的代码
我们主要关注HelloW