• <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>

            天行健 君子當自強而不息

            創建游戲內核(12)【OO改良版】

             

            本篇是創建游戲內核(11)【OO改良版】的續篇,關于該內核的細節說明請參閱創建游戲內核(12)。


            接口:

            class FONT
            {
            public:
                FONT();
                ~FONT();

                ID3DXFont* get_font();
                
            void free();

                BOOL create(
            const char* face_name, long size, BOOL is_bold, BOOL is_italic);    

                BOOL draw(
            const char* text, 
                          
            long x_pos, long y_pos, long width, long height,
                          D3DCOLOR color, DWORD format);    

            private:
                ID3DXFont*  m_font;
            };

            typedef FONT* FONT_PTR;
             

            實現:

            //-------------------------------------------------------------------
            // Constructor, initialize data member.
            //-------------------------------------------------------------------
            FONT::FONT()
            {
                m_font = NULL;
            }

            //-------------------------------------------------------------------
            // Destructor, release font resource.
            //-------------------------------------------------------------------
            FONT::~FONT()
            {
                free();
            }

            //-------------------------------------------------------------------
            // Get pointer to font object.
            //-------------------------------------------------------------------
            ID3DXFont* FONT::get_font()
            {
                
            return m_font;
            }

            //-------------------------------------------------------------------
            // Release font resource.
            //-------------------------------------------------------------------
            void FONT::free()
            {
                release_com(m_font);
            }

            //-------------------------------------------------------------------
            // create font object.
            //-------------------------------------------------------------------
            BOOL FONT::create(const char* face_name, long size, BOOL is_bold, BOOL is_italic)
            {
                D3DXFONT_DESC _font_desc;

                
            // check condition first
                if(g_d3d_device == NULL || face_name == NULL)
                    
            return FALSE;
                
                
            // clear out the font structure
                ZeroMemory(&_font_desc, sizeof(D3DXFONT_DESC));

                
            // set the font property

                strcpy(_font_desc.FaceName, face_name);

                _font_desc.Height = -size;
                _font_desc.Weight = is_bold ? 700 : 0;
                _font_desc.Italic = is_italic;

                
            // create the font object
                if(FAILED(D3DXCreateFontIndirect(g_d3d_device, &_font_desc, &m_font)))
                    
            return FALSE;

                
            return TRUE;
            }

            //-------------------------------------------------------------------
            // Draw text.
            //-------------------------------------------------------------------
            BOOL FONT::draw(const char* text, 
                            
            long x_pos, long y_pos, long width, long height, 
                            D3DCOLOR color, DWORD format)
            {
                
            if(m_font == NULL)
                    
            return FALSE;

                
            // set draw region's width and height
                if(width  == 0)  width  = 65536;
                
            if(height == 0)  height = 65536;

                RECT _rect;

                
            // set draw region
                _rect.left   = x_pos;
                _rect.top    = y_pos;
                _rect.right  = x_pos + width;
                _rect.bottom = y_pos + height;

                
            // draw text now
                if(FAILED(m_font->DrawText(NULL, text, -1, &_rect, format, color)))
                    
            return FALSE;

                
            return TRUE;
            }


            測試代碼:

            /***********************************************************************************
            PURPOSE:
                Test font class.
            ***********************************************************************************/


            #include "core_common.h"
            #include "core_framework.h"
            #include "core_graphics.h"

            class APP : public FRAMEWORK
            {
            public:
                
            //--------------------------------------------------------------------------------
                // Initialize data for game.
                //--------------------------------------------------------------------------------
                BOOL init()
                {   
                    
            // Create Direct3D and Direct3DDevice object
                    if(! create_display(g_hwnd, get_client_width(g_hwnd), get_client_height(g_hwnd), 16, TRUE, FALSE))
                        
            return FALSE;    

                    m_font.create("Segoe Script", 32, FALSE, FALSE);
                    
                    
            return TRUE;
                }

                
            //--------------------------------------------------------------------------------
                // Render every game frame.
                //--------------------------------------------------------------------------------
                BOOL frame()
                {
                    clear_display_buffer(D3DCOLOR_RGBA(0, 0, 0, 255));

                    
            if(SUCCEEDED(g_d3d_device->BeginScene()))
                    {
                        m_font.draw("nothing to say", 
                                  0, 0, get_client_width(g_hwnd), get_client_height(g_hwnd),
                                  0xFFFFFFFF, DT_CENTER | DT_VCENTER);

                        g_d3d_device->EndScene();
                    }

                    present_display();

                    
            return TRUE;
                }

                
            //--------------------------------------------------------------------------------
                // Release all game resources.
                //--------------------------------------------------------------------------------
                BOOL shutdown()
                {
                    release_com(g_d3d_device);
                    release_com(g_d3d);

                    
            return TRUE;
                }

            private:
                FONT m_font;
            };

            //--------------------------------------------------------------------------------
            // Main function, routine entry.
            //--------------------------------------------------------------------------------
            int WINAPI WinMain(HINSTANCE inst, HINSTANCE pre_inst, LPSTR cmd_line, int cmd_show)
            {    
                
            if(! build_window(inst, "MainClass", "MainWindow", WS_OVERLAPPEDWINDOW, 0, 0, 640, 480))
                    
            return -1;

                APP app;

                app.run();
                
                
            return 0;
            }

            posted on 2007-10-07 01:00 lovedday 閱讀(247) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            亚洲精品无码成人片久久| 一本一道久久a久久精品综合| 国内精品久久久久影院老司| 久久人人爽人人人人片av| 色综合久久精品中文字幕首页| 精品久久久中文字幕人妻| 少妇内射兰兰久久| 色综合久久最新中文字幕| 久久午夜夜伦鲁鲁片免费无码影视| 久久久久久国产a免费观看黄色大片| 四虎国产精品免费久久5151| 97香蕉久久夜色精品国产| 久久九九亚洲精品| 亚洲va久久久噜噜噜久久天堂| 久久e热在这里只有国产中文精品99| 久久久久久久波多野结衣高潮| 中文字幕亚洲综合久久2| 久久中文骚妇内射| 欧美日韩精品久久久免费观看| 国产精品无码久久久久| 久久精品国产亚洲AV无码麻豆 | 久久高清一级毛片| 日韩精品无码久久久久久| 亚洲午夜福利精品久久| 9191精品国产免费久久| 国产亚洲综合久久系列| 伊人久久大香线蕉综合影院首页| 狠狠色丁香久久婷婷综合_中| 精品久久人人爽天天玩人人妻| 97久久精品人人澡人人爽| 亚洲国产精品久久久久婷婷软件| 久久精品国产久精国产| 99国产精品久久久久久久成人热| 久久久久免费看成人影片| 波多野结衣AV无码久久一区| 亚洲综合伊人久久综合| 久久这里只有精品18| 免费观看成人久久网免费观看| 一级做a爰片久久毛片人呢| 7国产欧美日韩综合天堂中文久久久久| 国产叼嘿久久精品久久|