• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            劍孤寒的小站

            人生的價值不是用時間,而是用深度去衡量的!
            posts - 75, comments - 290, trackbacks - 0, articles - 0
                 這一節我們來學習如何使用字體,首先我們要創建一個字體,在GGE中用Font_Create (LPCSTR fontname, int size=16, bool bBold=false, bool bBorder=false)函數來創建一個字體。fontname表示字體名字,可以使用任何已在操作系統中注冊過的字體,如果找不到指定的字體,將使用系統默認字體。size參數表示字體大小,單位為像素,默認的字體大小為16x16像素。如果希望使用粗體字,可將bBold參數設為true。bBorder參數則用于設置是否給字體加上邊框,邊框的顏色也是可以設置的。

                在OnInitiate()函數中添加創建字體代碼:

            m_font = Font_Create("宋體"18falsetrue);
              創建成功會返回一個ggeFont指針,順便設置一下字體邊框的顏色
            m_font->SetBorderColor(0xFF0000FF);

                ggeFont提供了兩個函數來將文字顯示在屏幕上,分別是gge::Render()gge::Print(),后者有點像printf()函數可以格式化字符串。在顯示文字時可以設置文字的對齊樣式,ggeFont提供了三種對齊樣式:左對齊、右對齊、居中對齊,可以通過ggeFont::SetAlign()函數進行設置。

                   //設置對齊樣式
                    Graph_RenderLine(128012860); 
                    m_font
            ->SaveState(); //保存當前狀態
                    m_font->SetColor(0xFFFFFFFF);
                    m_font
            ->SetAlign(TEXT_LEFT);
                    m_font
            ->Render(1280"左對齊");
                    m_font
            ->SetAlign(TEXT_CENTER);
                    m_font
            ->Render(12820"居中對齊");
                    m_font
            ->SetAlign(TEXT_RIGHT);
                    m_font
            ->Render(12840"右對齊");
                    m_font
            ->LoadState(); //恢復以前的狀態

                前面代碼中的ggeFont::SaveState()ggeFont::LoadState()用于保存和恢復字體狀態,以免前面改變的字體狀態會影響后面的文字顯示,而且也不用每次改了狀態后都要人肉改回來了。

                在一些游戲中可能需要讓文字逐字顯示出來,ggeFont提供了一個函數ggeFont::SetCharNum()來做這件事情,另外在游戲中可能需要顯示一些關鍵字,ggeFont提供了一個顏色標簽功能,使得可以在顯示文字時動態改變后面的文字顏色。
                    //顯示一定數量的文字
                    int maxChar = m_font->GetStringInfo("字體測試");
                    
            if (Timer_GetTime() - m_charTime > 1
                    
            {
                        
            if (m_charNum >= maxChar) m_charNum = 0;
                        
            else m_charNum++;

                        m_charTime 
            = Timer_GetTime();
                    }

                    m_font
            ->SaveState(); //保存當前狀態
                    m_font->SetCharNum(m_charNum); //設置顯式的文字數量
                    m_font->Render(0100"<cff0000>字<cffff00>體<cff00ff>測<c00ffff>試"); //顯示文字
                    m_font->LoadState(); //恢復以前的狀態
                    m_font->Print(0120"正在顯示第%d個字。", m_charNum);

                這段代碼先通過ggeFont::GetStringInfo()函數拿到字符串文字數量(也可以拿到字符串其它一些信息,詳細說明請查看引擎文檔),然后用ggeFont::SetCharNum()設置每次要顯示的文字數量,在顯示文字時通過在文字前加上類似<cff0000>的顏色標簽來動態改變字符串中的文字顏色。

                有時候在顯示一段文字時可能想要文字根據某個寬度自動換行,ggeFont提供了一個ggeFont::SetLingWidth()來做這件事情。
                    //設置行間距、字間距以及換行
                    m_font->SaveState();
                    m_font
            ->SetLineSpace(4);
                    m_font
            ->SetCharSpace(2);
                    m_font
            ->SetLineWidth(140);
                    m_font
            ->Render(0180"這段文字的行間距為4,字間距為2,每行如果超過140個像素則自動換行。");
                    m_font
            ->LoadState();
                以上介紹了ggeFont的一些常用功能,還有一些例如裁剪、陰影等功能就不一一舉例了,文檔里都有詳細說明。


            Feedback

            # re: Galaxy2D游戲引擎教程5 - 使用字體  回復  更多評論   

            2011-08-26 20:49 by nana
            博主你好,用3.6版本測試以上程序,發現Font類的SaveState()和LoadState()函數取消了;顏色標簽效果好像也沒有了,求解答。

            # re: Galaxy2D游戲引擎教程5 - 使用字體  回復  更多評論   

            2011-08-29 09:16 by 劍孤寒
            Font類的顏色標簽已經取消了,因為已經提供了ggeGuiRichText支持圖文混排等各種高級文字功能,有了ggeGuiRichText后SaveState()/LoadState()函數也不需要了,因為每個ggeGuiRichText內部狀態是自己管理的,不需要再那么麻煩的人肉管理字體狀態了

            # re: Galaxy2D游戲引擎教程5 - 使用字體[未登錄]  回復  更多評論   

            2015-11-04 11:36 by shepherd
            ggeFont使用出錯。
            首先是在初始化函數中生成:
            debug = Font_Create ("./ui/font/STFANGSO.TTF", 16, FONT_MODE_DEFAULT);
            然后設置:
            debug->SetColor(0xFF00FFFF);
            debug->SetBlendMode(BLEND_COLORMUL | BLEND_ALPHAMUL | BLEND_ZWRITE);
            再在渲染函數中:
            debug->SetZ(0.01f);
            debug->Render(0.0f, 0.0f, "10086");

            輸出窗口無任何顯示。請在線DEBUG,呵呵

            # re: Galaxy2D游戲引擎教程5 - 使用字體  回復  更多評論   

            2015-11-07 22:12 by 劍孤寒
            @shepherd
            已經試過了,木有發現問題,你發個能重現問題的小程序以及相關字體到我郵箱吧

            # re: Galaxy2D游戲引擎教程5 - 使用字體[未登錄]  回復  更多評論   

            2015-11-08 04:17 by shepherd
            已發!
            多謝!!

            # re: Galaxy2D游戲引擎教程5 - 使用字體  回復  更多評論   

            2015-11-08 11:38 by 劍孤寒
            @shepherd
            你的代碼頁設置有問題,應該用936,其實如果你只是做中文游戲就不需要修改這個設置,除非你要做其他語言的游戲如日/韓游戲才需要修改這個設置

            # re: Galaxy2D游戲引擎教程5 - 使用字體[未登錄]  回復  更多評論   

            2015-11-08 20:56 by shepherd
            已正常運行,多謝!正在找一種合適的字體,要中英文顯示都看得過去,似乎不太容易找呢
            亚洲日本va午夜中文字幕久久| 久久久久亚洲AV无码专区体验| 韩国三级大全久久网站| 亚洲一区中文字幕久久| 久久精品二区| 东方aⅴ免费观看久久av| 久久精品中文字幕无码绿巨人| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 理论片午午伦夜理片久久| 亚洲国产精品无码久久| 国产99久久九九精品无码| 久久99久国产麻精品66| 久久九九亚洲精品| 欧洲精品久久久av无码电影| 成人国内精品久久久久影院VR| 久久无码AV一区二区三区| 久久精品国产第一区二区三区| 国产精品久久久天天影视香蕉 | 国产精品久久久99| 久久综合九色综合网站| 久久久99精品成人片中文字幕| 久久综合综合久久综合| 久久久国产视频| 久久久久一级精品亚洲国产成人综合AV区| 亚洲一区精品伊人久久伊人 | 日产久久强奸免费的看| 久久久久久久99精品免费观看| 亚洲国产日韩综合久久精品| 国产精品热久久无码av| 狠狠久久亚洲欧美专区| 国产精品一区二区久久国产| 久久久久亚洲av成人网人人软件| 久久人妻少妇嫩草AV无码蜜桃| 久久综合九色综合精品| 国产精品99久久精品| 久久精品国产第一区二区三区| 日本欧美久久久久免费播放网| yy6080久久| 中文精品久久久久人妻不卡| 三级三级久久三级久久| 久久午夜无码鲁丝片秋霞|