1

由于 Cocos2D 能力之外的原因,我需要使其透明并在其背后显示 UIView。

这工作正常,除非在特定情况下。当精灵的不透明度变得更加透明时,由于某种原因,它会使在其下绘制的 Cocos2D 中的其他所有内容变得透明,这使我的 UIViews 显示出来。

第一张图中显示的是水瓦,在 Cocos2D 中绘制,带有山的 UIView 和下面的天空。第二张图片是一样的,只是在 Cocos2D 中,有一个黑色精灵以一半的不透明度覆盖整个屏幕,由于某种原因,这使得它下面的 UIView 显示出来。在我的示例中,最明显的是通过水瓦显示的山。

Cocos2D 上没有应用透明图像

在 Cocos2D 上应用透明图像

我的委托的 applicationDidFinishLaunching 代码如下:

- (void) applicationDidFinishLaunching:(UIApplication*)application 
{
    // Init the window
    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Try to use CADisplayLink director
    // if it fails (SDK < 3.1) use the default director
    if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
        [CCDirector setDirectorType:kCCDirectorTypeDefault];


    CCDirector *director = [CCDirector sharedDirector];

    // Init the View Controller
    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;

    EAGLView *glView = [EAGLView viewWithFrame:[window bounds]
                                   pixelFormat:kEAGLColorFormatRGBA8    // kEAGLColorFormatRGBA8, kEAGLColorFormatRGB565
                                   depthFormat:0                        // GL_DEPTH_COMPONENT16_OES
                        ];

    // attach the openglView to the director
    [director setOpenGLView:glView];

    glView.opaque = NO;

#if GAME_AUTOROTATION == kGameAutorotationUIViewController
    [director setDeviceOrientation:kCCDeviceOrientationPortrait];
#else
    [director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
#endif

    [director setAnimationInterval:1.0/60];
    [director setDisplayFPS:YES];


    //color/gradient BG

    bgLayer = [ColorBGView createGradientWithName:@"darkCave"];

    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;
    CGFloat screenHeight = screenRect.size.height;

    bgLayer.frame = CGRectMake(0, 0, screenHeight, screenWidth);
    [viewController.view.layer insertSublayer:bgLayer atIndex:0];


    // add custom parallax view

    parallaxView = [[ParallaxView alloc] init];
    parallaxView.frame = CGRectMake(0, 0, 1024, 768);
    [viewController.view insertSubview:parallaxView atIndex:1];

    [parallaxView release];


    // make the OpenGLView a child of the view controller
    [viewController.view insertSubview:glView atIndex:2];
    viewController.view.opaque = YES;
    viewController.view.backgroundColor = [UIColor blackColor];


    // make the View Controllers childs of the main window
    window.rootViewController = viewController;


    foregroundLabelView = [[ForegroundLabelView alloc] init];
    foregroundLabelView.frame = CGRectMake(0, 0, 1024, 768);
    [viewController.view insertSubview:foregroundLabelView atIndex:3];
    foregroundLabelView.hidden = YES;

    [foregroundLabelView release];


    [window makeKeyAndVisible];

    // Default texture format for PNG/BMP/TIFF/JPEG/GIF images
    // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565
    // You can change anytime.
    [CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888]; //

    [glView setMultipleTouchEnabled:YES];


    // Removes the startup flicker
    [self removeStartupFlicker];

    // Run the intro Scene
    [[CCDirector sharedDirector] runWithScene: [BlankScene scene]];
}

如果您需要其他任何东西,请告诉我。谢谢你。

4

0 回答 0