0

妥当な時間内に解決できなかった別の奇妙な問題があります。私のアプリは、網膜が有効になっているかどうかにかかわらず、iPhone4SとiPod4-thでうまく動作します。また、網膜のないiPad3でもうまく機能します。ただし、iPadで網膜が有効になっている場合、CCSpritesは表示されません。私はカメラ画像の下敷きを持っていますが、その上にグラフィックは表示されていません。私はすべての「-hd」バージョンのファイルを利用できると思います。それらはiPhoneの網膜モードでもうまく表示されます。

関連すると思うコードを貼り付けます:

- (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];

そして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];

編集:私は一時的なハックをしました:

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");
    }

しかし、疑問は残ります-なぜですか?

4

1 に答える 1

0

問題が解決しました。「きれいにする」だけでは不十分でした。「クリーン」を押したときに「オプション」ボタンを押したままにすると、さらにクリーンアップが強制されます。その後、物事は機能し始めました。また、問題発生後に「いいえ」に変更した「PNGファイルの圧縮」設定に関連している可能性もありますが、強制されていない可能性があります。とにかく問題はなくなり、見てくれてありがとう:)

于 2012-06-27T03:38:01.673 に答える