Search code examples
iosipadcocos2d-iphoneccspriteretina-display

CCSprite does not display on iPad+Retina


I have another weird problem which I have not been able to solve in reasonable time. My app works well on iPhone 4S and iPod 4-th with and without retina enabled. It also works well on iPad3 without retina. But when iPad has retina enabled, CCSprites just do not appear. I do have camera image underlay which is shown but not graphics on top of it. I think I have all "-hd" versions of files available and they are also shown well on iPhone in retina mode.

I paste code which I think is related:

- (void) applicationDidFinishLaunching:(UIApplication*)applicationv{
    CCLOG(@"applicationDidFinishLaunching");

    window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    if( ! [CCDirector setDirectorType:kCCDirectorTypeDisplayLink] )
        [CCDirector setDirectorType:kCCDirectorTypeDefault];

    CCDirector *director = [CCDirector sharedDirector];

    viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
    viewController.wantsFullScreenLayout = YES;

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

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

    // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
    if( ! [director enableRetinaDisplay:YES] )
        CCLOG(@"Retina Display Not supported");

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

    [director setAnimationInterval:1.0/20];
    [director setDisplayFPS:NO];

    [viewController setView:glView];
    [window addSubview: viewController.view];

    [CCDirector sharedDirector].openGLView.backgroundColor = [UIColor clearColor];
    [CCDirector sharedDirector].openGLView.opaque = NO;

    glClearColor(0.0, 0.0, 0.0, 0.0);

    _cameraView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    _cameraView.opaque = NO;
    _cameraView.backgroundColor=[UIColor clearColor];
    [window addSubview:_cameraView];

    _imageView = [[UIImageView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [_cameraView addSubview:_imageView];

    [window bringSubviewToFront:viewController.view];    
    [window makeKeyAndVisible];

    [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888];

    CCScene *scene = [CCScene node];
    _layer =[[[HelloWorldLayer alloc] init] autorelease]; 
    _menu =[MenuScene node]; 
    [scene addChild:_layer];
    [_layer addChild:_menu];
    viewController.fdLayer = _layer;
    _layer.root = viewController;
    [[CCDirector sharedDirector] runWithScene: scene];

And MenuScene.m:

@implementation MenuScene
+(id) scene {
    CCScene* scene = [CCScene node];
    CCLayer* layer = [MenuScene node];
    [scene addChild:layer];
    return scene;
}

-(id) init {
    if ((self = [super init])) {
        CCLOG(@"init %@", self);

        CGSize screen = [[CCDirector sharedDirector] winSize];
        CCLOG(@"%f %f",screen.width,screen.height);
        CCLayerColor *b = [CCLayerColor layerWithColor:ccc4(0, 0, 0, 100) width:screen.width height:screen.height/4];
        b.isRelativeAnchorPoint=YES;
        b.anchorPoint=ccp(0, 1); // left top corner
        b.position=ccp(0, screen.height);
        [self addChild:b];

        CCSprite* bg = [CCSprite spriteWithFile:@"01-main-logo.png"];
        bg.position = CGPointMake(screen.width / 2, screen.height*0.12);
        [b addChild:bg];

EDIT: I made temporary hack:

if (UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad)  {
    // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices
    if( ! [director enableRetinaDisplay:YES] )
        CCLOG(@"Retina Display Not supported");
    }

but question remains - why?


Solution

  • Problem solved. "Make Clean" was not enough. Keeping "Option" button down when pressing "Clean" forces even more to be cleaned up. After that things started to work. There is also possibility that it was related to "Compress PNG files" setting which I changed to "No" after problems started but it was maybe not enforced. Anyway problem gone away and thanks for watching :)