cocos2d-x使用第三方的TTF字體庫

                                            cocos2d-x使用第三方的TTF字體庫          

       最近再做一款手機遊戲,用的是cocos2d-x引擎,對於這個引擎我不太熟悉,以前我是做蘋果系統的UI界面的,對於cocos2d-x這個引擎接觸的比較少。後來遇到一個問題就是遊戲中的很多角色都需要使用特殊的字體,比如隸書,行楷等等。但是ios內部不支持這麼複雜的中文字體,怎麼辦呢,不多廢話了,直接本主題吧。。。

1.從網上下載你所需要的字體,比如xxx.ttf,我這裏推薦一個網站,http://www.zhaozi.cn/s/all/ttf/ (這是我們部門的美工推薦給我的)。

2.打開Xcode,我是在Xcode下進行編碼的,至於以後移植安卓,再做介紹。打開Xcode的plist文件。如下圖,首先把需要的字體文件添加進Resource目錄下,然後打開這個目錄下的info.plist文件(cocos2d和cocos2d-x的名字是info.plist,如果自己建別的工程,名字可能會不同),右鍵新建一行,起名叫做Font provided by application ,然後把你想要添加的自己寫入相應的item中,注意要帶後綴名。



3.我們已經把自己加入了系統中,但是如何使用呢?我看過不少網站上寫着說TTF字庫的名字就是字體名字,有的說你雙擊打開字庫,窗口上的標題就是自己名字,例如


或許對於英文字庫來說,可能是正確的,但是對於中文字庫來說,錯誤率很高,設置說幾乎都是錯的,這也是爲什麼我要寫這篇文章。我研究了好幾天,試了很多方法,才把這個問題搞定了。下面我來介紹一下我的方法吧。

首先新建一個cocos2d或者基礎的ios應用工程,注意不是cocos2d-x的,因爲我們要用到oc的代碼,我就新建了一個cocos2d的工程,在HelloWorldLayer類的init()方法改寫成如下:


-(id) init
{
    // always call "super" init
    // Apple recommends to re-assign "self" with the "super's" return value
    if( (self=[super init]) ) {
        
        
        NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
        NSArray *fontNames;
        
        NSInteger indFamily, indFont;
        
        for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
        {
            NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
            
            fontNames = [[NSArray alloc] initWithArray:
                         
                         [UIFont fontNamesForFamilyName:
                          
                          [familyNames objectAtIndex:indFamily]]];
            
            for (indFont=0; indFont<[fontNames count]; ++indFont)
                
            {
                
                NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
                
            }
            
            [fontNames release];
            
        }
        
        [familyNames release];
    }
    return self;
}

運行程序,控制檯就會把當前系統支持的字體都打印出來,但是這個時候面對了兩三百行的字體名字,你也不知道到底哪個纔是你想要的,到了關鍵時刻了,怎麼辦呢?你把這些輸出複製出來,打開TextWrangler這個工具,粘貼進去,當然直接粘貼進代碼也是可以的。然後你把info.plist文件中加入的幾個字體庫刪除了,在運行一遍,這時候你得到的輸出就是沒有那些字體名稱的,這時就找到了字體的名稱


//        2013-03-01 13:43:00.934 Cocos2dLabelFont[3739:c07] Family name: FZXingKai-S04T
//        2013-03-01 13:43:00.935 Cocos2dLabelFont[3739:c07]     Font name: FZXKFW--GB1-0
//        2013-03-01 13:43:01.006 Cocos2dLabelFont[3739:c07] Family name: FZPangWa-M18T
//        2013-03-01 13:43:01.007 Cocos2dLabelFont[3739:c07]     Font name: FZPWFW--GB1-0
//        2013-03-01 13:43:00.920 Cocos2dLabelFont[3739:c07]     Font name: TJenLei-Medium

好了,到這裏你就可以使用你的字體了,記得把從info.plist文件刪除的字庫文件名加上。

5.現在我們在init()方法中[fontNames release];後面寫上如下代碼

        CCLabelTTF *label1 = [CCLabelTTF labelWithString:@"長城中隸繁體0123456789" fontName:@"TJenLei-Medium" fontSize:24];
        CCLabelTTF *label2 = [CCLabelTTF labelWithString:@"方正胖娃繁體0123456789" fontName:@"FZPWFW--GB1-0" fontSize:24];
        CCLabelTTF *label3 = [CCLabelTTF labelWithString:@"方正行楷繁體0123456789" fontName:@"FZXKFW--GB1-0" fontSize:24];
        CCLabelTTF *label4 = [CCLabelTTF labelWithString:@"方正行楷繁體0123456789" fontName:@"--unknown-1--" fontSize:24];


        CGSize size = [[CCDirector sharedDirector] winSize];
        
    
        label1.position =  ccp( size.width /2 , size.height/2+50 );
        label2.position =  ccp( size.width /2 , size.height/2 );
        label3.position =  ccp( size.width /2 , size.height/2-50 );
        label4.position =  ccp( size.width /2 , size.height/2-100 );

       
        
        [self addChild: label1];
        [self addChild: label2];
        [self addChild: label3];
        [self addChild: label4];

6.運行,結果如下圖



7.好了,大功告成了,現在知道了字庫的自己名稱,那麼我們就可以把它用在cocos2d-x的工程中了,同理,使用方法如下

    CCLabelTTF* labelTitle = CCLabelTTF::create("測試字體", "--unknown-1--", 24);
這就可以了。










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章