Cocos2d iphone CCLayer中的对象顺序(cocos2d iphone)
我使用以下初始化代码初始化CCLayer:Cocos2d iphone CCLayer中的对象顺序(cocos2d iphone),cocos2d-iphone,Cocos2d Iphone,我使用以下初始化代码初始化CCLayer: - (id)init { if((self=[super init])) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.sourceType = UIImagePickerControllerSourceTypeCamera;
- (id)init {
if((self=[super init])) {
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.wantsFullScreenLayout = YES;
picker.allowsEditing = NO;
picker.showsCameraControls = NO;
picker.navigationBarHidden = YES;
picker.toolbarHidden = YES;
picker.cameraViewTransform= CGAffineTransformMakeScale(1.3, 1.33);
[[[CCDirector sharedDirector] openGLView] addSubview:picker.view];
CCSprite *gold = [CCSprite sprite];
gold.position = ccp(150, 150);
[self addChild:gold];
}
return self;
}
相机快门打开前,CCSprite位于相机视图上方,但当快门打开时,CCSprite与相机重叠
我可以重新排列这两个对象的顺序/将相机视图放在后面吗?需要一些额外的工作 为了理解这一点,你必须考虑通过COSCO2D将相机视图添加到OpenGLVIEW中。这使相机视图成为Cocos2D视图的“子”视图。这类似于将子节点添加到CCScene或CCLayer,然后希望在场景或层后面绘制该节点。如果不更改视图层次结构的设置方式,则无法执行此操作 因此,您必须修改Cocos2D的启动,以便openGLView不会直接添加到UIWindow,而是添加到另一个UIView
UIView* dummyView = [[UIView alloc] initWithFrame:[window bounds]];
[dummyView autorelease];
[dummyView addSubview:[CCDirector sharedDirector].openGLView];
rootViewController.view = dummyView;
然后,您可以将摄影机视图添加到dummyView(而不是openGLView,否则您将遇到与以前相同的问题),并对其执行操作,使其处于背景中
为了提供alpha通道,还必须使用kEAGLColorFormatRGBA8像素格式初始化Cocos2D的OpenGL视图
EAGLView* glView = [EAGLView viewWithFrame:[window bounds]
pixelFormat:kEAGLColorFormatRGBA8
depthFormat:0
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
您还需要使openGLView透明:
[CCDirector sharedDirector].openGLView.opaque = NO;
当然,只有在cocos2d视图上不全屏渲染任何内容时,这才有效。例如,如果为Cocos2D视图提供全屏背景图像,则不会显示任何内容,因为背景图像是在摄影机视图的顶部渲染的
您可以在中找到更详细的说明。您还可以从该链接下载本书的源代码,并查看第15章的示例。或者下载并使用提供的Cocos2D With UIKit Views模板项目。需要一些额外的工作 为了理解这一点,你必须考虑通过COSCO2D将相机视图添加到OpenGLVIEW中。这使相机视图成为Cocos2D视图的“子”视图。这类似于将子节点添加到CCScene或CCLayer,然后希望在场景或层后面绘制该节点。如果不更改视图层次结构的设置方式,则无法执行此操作 因此,您必须修改Cocos2D的启动,以便openGLView不会直接添加到UIWindow,而是添加到另一个UIView
UIView* dummyView = [[UIView alloc] initWithFrame:[window bounds]];
[dummyView autorelease];
[dummyView addSubview:[CCDirector sharedDirector].openGLView];
rootViewController.view = dummyView;
然后,您可以将摄影机视图添加到dummyView(而不是openGLView,否则您将遇到与以前相同的问题),并对其执行操作,使其处于背景中
为了提供alpha通道,还必须使用kEAGLColorFormatRGBA8像素格式初始化Cocos2D的OpenGL视图
EAGLView* glView = [EAGLView viewWithFrame:[window bounds]
pixelFormat:kEAGLColorFormatRGBA8
depthFormat:0
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
您还需要使openGLView透明:
[CCDirector sharedDirector].openGLView.opaque = NO;
当然,只有在cocos2d视图上不全屏渲染任何内容时,这才有效。例如,如果为Cocos2D视图提供全屏背景图像,则不会显示任何内容,因为背景图像是在摄影机视图的顶部渲染的
您可以在中找到更详细的说明。您还可以从该链接下载本书的源代码,并查看第15章的示例。或者下载并使用提供的Cocos2D With UIKit Views模板项目