Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocos2d iphone CCLayer中的对象顺序(cocos2d iphone)_Cocos2d Iphone - Fatal编程技术网

Cocos2d iphone CCLayer中的对象顺序(cocos2d iphone)

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;

我使用以下初始化代码初始化CCLayer:

- (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模板项目