0

ゲームのプロジェクトには cocos2d 1.1、xCode 4.5 を使用しています。iPhone 5 をサポートするためにゲームを再コーディングしたいのですが、cocos2d 1.1 が retina 4 インチのスプライトを検出できないという問題に直面しました。

Default-568h@2x.png - 正常に動作しますが、ゲームのスプライトは *-hd.png として表示されます。cocos2d 1.1 では *-hd.png しか検出できないようですが、スプライト *-568h@2x.png を追加しました。

私の英語でごめんなさい。

この問題の解決策は sergio の下に書かれているようにCCFileUtils.mファイルにあります。

メソッド+(NSString*) getDoubleResolutionImage:(NSString*)pathに少し変更を加えました

+(NSString*) getDoubleResolutionImage:(NSString*)path
{
#if CC_IS_RETINA_DISPLAY_SUPPORTED

    if( CC_CONTENT_SCALE_FACTOR() == 2 )
    {
        NSString *pathWithoutExtension = [path stringByDeletingPathExtension];
        NSString *name = [pathWithoutExtension lastPathComponent];

        NSString *extension = [path pathExtension];

        if( [extension isEqualToString:@"ccz"] || [extension isEqualToString:@"gz"] )
        {
            extension = [NSString stringWithFormat:@"%@.%@", [pathWithoutExtension pathExtension], extension];
            pathWithoutExtension = [pathWithoutExtension stringByDeletingPathExtension];
        }

        CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;

        if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f)
        {
            if( [name rangeOfString:CC_RETINA4_DISPLAY_FILENAME_SUFFIX].location != NSNotFound ) {

                CCLOG(@"cocos2d: WARNING Filename(%@) already has the suffix %@. Using it.", name, CC_RETINA4_DISPLAY_FILENAME_SUFFIX);
                return path;
            }

            NSString *retinaName = [pathWithoutExtension stringByAppendingString:CC_RETINA4_DISPLAY_FILENAME_SUFFIX];
            retinaName = [retinaName stringByAppendingPathExtension:extension];

            if( [__localFileManager fileExistsAtPath:retinaName] )
            {   
                return retinaName;
            }
        }

        if( [name rangeOfString:CC_RETINA_DISPLAY_FILENAME_SUFFIX].location != NSNotFound ) {

            CCLOG(@"cocos2d: WARNING Filename(%@) already has the suffix %@. Using it.", name, CC_RETINA_DISPLAY_FILENAME_SUFFIX);
            return path;
        }

        NSString *retinaName = [pathWithoutExtension stringByAppendingString:CC_RETINA_DISPLAY_FILENAME_SUFFIX];
        retinaName = [retinaName stringByAppendingPathExtension:extension];
        if( [__localFileManager fileExistsAtPath:retinaName] )
        {   
            return retinaName;
        }

        CCLOG(@"cocos2d: CCFileUtils: Warning HD file not found: %@", [retinaName lastPathComponent] );

    }

#endif // CC_IS_RETINA_DISPLAY_SUPPORTED

    return path;
}

また、ファイルccConfig.hに追加します

#ifndef CC_RETINA4_DISPLAY_FILENAME_SUFFIX
#define CC_RETINA4_DISPLAY_FILENAME_SUFFIX @"-568h@2x"
#endif

誰かお知らせあったら書いてね

4

2 に答える 2

1

ccConfig.h ファイルでサフィックスを変更できます

#ifndef CC_RETINA_DISPLAY_FILENAME_SUFFIX
#define CC_RETINA_DISPLAY_FILENAME_SUFFIX @"-hd"
#endif
于 2012-10-03T12:19:53.863 に答える
1

私の知る限り、Cocos2D 2.x では iPhone 5 -568h@2x 画像の一般的なサポートはありません。

cocos2D 2.1 に追加された唯一の iPhone 5 固有のサポートはDefault-568h@2x.png、Xcode テンプレートへの画像の追加に関するものです。詳細については、ChangeLogを参照してください。

一方でUIKit「-568h@2x images」もサポートされていないのも事実なので、cocos2Dが追加することはないと思います。

より概念的なレベルでは、iPhone 5 の解像度をサポートするための一般的なアプローチは、ビットマップ レベル (つまり、異なるサイズの画像を提供する) ではなく、レイアウト レベル (つまり、画像以外の UI の配置またはサイズを変更する) であると理解しています。要素)。(考えてみれば、iPhone と iPad の両方で、既に x1 と x2 の画像を管理する必要があります。これは、画像ごとに 4 つの異なるバージョンを意味します。これに別の次元を追加するのはクレイジーです。)

あなたのアプリがスケーリングされた画像を本当に使用する必要がある場合は、UIKit を使用するときと cocos2D を使用するときの両方で、あなた自身であると思います。

明るい面では、見ればCCFileUtils.h簡単に変更できるので、-568h@2x. これについての議論が必要な場合は、類似の変更を説明しているこのブログ投稿をご覧ください。ただし、iPad 3 の場合です。独自のソリューションを構築するのに役立つ場合があります。

于 2012-10-03T13:51:48.497 に答える