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);
這就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM