• <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
            已正常運行,多謝!正在找一種合適的字體,要中英文顯示都看得過去,似乎不太容易找呢
            国产偷久久久精品专区| 久久精品99久久香蕉国产色戒| 亚洲?V乱码久久精品蜜桃 | 99久久精品国产综合一区 | 国内精品久久久久影院网站 | 日韩影院久久| 亚洲伊人久久精品影院| 久久综合九色综合欧美狠狠| 热久久国产欧美一区二区精品| 色综合久久久久综合体桃花网| 99久久综合国产精品二区| 久久久午夜精品福利内容| 伊人久久精品线影院| 精品国产乱码久久久久久呢 | 久久综合狠狠色综合伊人| 伊人久久大香线蕉综合5g| 成人妇女免费播放久久久| 最新久久免费视频| 欧美激情精品久久久久| 青青草原精品99久久精品66| 一级做a爰片久久毛片免费陪| 亚洲午夜精品久久久久久人妖| 色偷偷偷久久伊人大杳蕉| 久久热这里只有精品在线观看| 青青草国产成人久久91网| 精品熟女少妇av免费久久| 99精品国产99久久久久久97| 午夜福利91久久福利| 欧美日韩精品久久久免费观看| 99久久国产综合精品成人影院| 2021少妇久久久久久久久久| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 色综合久久久久网| 国产人久久人人人人爽| 久久久久久久波多野结衣高潮 | 99久久无色码中文字幕| 久久久无码精品亚洲日韩按摩| 蜜臀久久99精品久久久久久小说| 囯产精品久久久久久久久蜜桃 | 久久精品三级视频| 久久亚洲电影|