• <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
            已正常運行,多謝!正在找一種合適的字體,要中英文顯示都看得過去,似乎不太容易找呢
            国产精品九九久久免费视频 | 亚洲中文字幕伊人久久无码| 精品久久久久中文字幕一区| 久久青青草原精品国产不卡| 香蕉久久夜色精品国产尤物| 亚洲日韩中文无码久久| 情人伊人久久综合亚洲| 亚洲人成无码www久久久| 久久精品国产亚洲AV嫖农村妇女| 99久久国产综合精品五月天喷水 | 久久综合久久自在自线精品自| 国产精品禁18久久久夂久 | 97r久久精品国产99国产精| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久青青国产| 久久精品中文无码资源站 | 久久天天躁狠狠躁夜夜不卡 | 久久ww精品w免费人成| 欧美久久一区二区三区| 国产精品久久久久影院嫩草| 奇米影视7777久久精品人人爽| 精品久久一区二区三区| 国产成年无码久久久免费| 久久综合给合综合久久| 久久er热视频在这里精品| 中文精品久久久久人妻不卡| 久久久久国产一级毛片高清板| 久久人人妻人人爽人人爽| 久久亚洲中文字幕精品一区| 久久精品国产一区二区三区不卡| 久久久久久久人妻无码中文字幕爆| 天天综合久久一二三区| 久久99热这里只有精品国产| 色综合久久88色综合天天| 97久久超碰国产精品旧版| 久久久女人与动物群交毛片| 无码人妻精品一区二区三区久久 | 中文无码久久精品| 中文字幕久久久久人妻| 精品久久久久久久国产潘金莲| 久久久久免费视频|