青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當(dāng)自強(qiáng)而不息

創(chuàng)建游戲內(nèi)核(12)

 

本篇是 創(chuàng)建游戲內(nèi)核(11)的續(xù)篇,其中涉及到的字體知識(shí)請(qǐng)參閱D3D中的字體繪制示例

 

使用FONT處理文本和字體

雖然ID3DXFont對(duì)象處理起來(lái)比較容易,但是設(shè)置字體卻讓人痛苦不堪。不要緊,使用FONT類就能快速并容易地得到字體。

來(lái)看看FONT類的定義:

class FONT
{
private:
    ID3DXFont*  _font;

public:
    FONT();
    ~FONT();

    ID3DXFont* Get_Font_COM();

    BOOL Create(GRAPHICS* graphics, 
char* face_name, long size = 16, BOOL is_bold = FALSE, BOOL is_italic = FALSE);
    
void Free();

    BOOL Print(
char* text, long x_pos, long y_pos, long width = 0, long height = 0,
               D3DCOLOR color = 0xFFFFFFFF, DWORD format = 0);
};

接著是FONT類的實(shí)現(xiàn):
//-------------------------------------------------------------------
// Constructor, initialize data member.
//-------------------------------------------------------------------
FONT::FONT()
{
    _font = NULL;
}

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

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

//-------------------------------------------------------------------
// Create font object.
//-------------------------------------------------------------------
BOOL FONT::Create(GRAPHICS *graphics, char* face_name, long size, BOOL is_bold, BOOL is_italic)
{
    D3DXFONT_DESC font_desc;

    
// check condition first

    
if(graphics == NULL || face_name == NULL)
        
return FALSE;

    
if(graphics->Get_Device_COM() == 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(graphics->Get_Device_COM(), &font_desc, &_font)))
        
return FALSE;

    
return TRUE;
}

//-------------------------------------------------------------------
// Release font resource.
//-------------------------------------------------------------------
void FONT::Free()
{
    Release_COM(_font);
}

//-------------------------------------------------------------------
// Draw text.
//-------------------------------------------------------------------
BOOL FONT::Print(char* text, long x_pos, long y_pos, long width, long height, D3DCOLOR color, DWORD format)
{
    RECT rect;

    
if(_font == NULL)
        
return FALSE;

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

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

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

    
return TRUE;
}

要使用某個(gè)字體,使用FONT::Create函數(shù)來(lái)創(chuàng)建,必須給Create函數(shù)傳遞一個(gè)預(yù)初始化的GRAPHICS對(duì)象,提供一個(gè)字體名稱,并指定字體的大小(使用像素高度的近似值)。

打印一行文本時(shí),需要給FONT::Print函數(shù)提供一個(gè)指向要打印文本的指針、開始打印處的坐標(biāo)、用于裁剪文本的邊界框(bounding box,即文本區(qū)域框)的大小(width和height的缺省值為0,表示全屏)、文本的顏色(缺省為白色,而且要使用D3DCOLOR_RGBA宏定義顏色)以及文本格式。

下表列出了打印文本時(shí)可以使用的格式:
 

標(biāo)志 說(shuō)明
DT_BOTTOM 將文本對(duì)齊到邊界矩形的底部。
DT_CENTER 在邊界矩形中將文本水平居中。
DT_LEFT 將文本左對(duì)齊到邊界矩形的左邊緣。
DT_NOCLIP 繪制文本,不將文本裁剪到邊界矩形中,用于快速繪制。
DT_RIGHT 將文本右對(duì)齊到邊界矩形的右邊緣。
DT_TOP 將文本對(duì)齊到邊界矩形的頂部。
DT_WORDBREAK 當(dāng)?shù)竭_(dá)邊界矩形的右邊緣時(shí),文本將自動(dòng)切換到下一行輸出。

 

下面來(lái)看看一個(gè)完整的示例:

點(diǎn)擊下載源碼和工程

/*****************************************************************************
PURPOSE:
    Test for class FONT.
*****************************************************************************/


#include "Core_Global.h"

#pragma warning(disable : 4996)

//===========================================================================
// Defines class APP which public inherits from class APPLICATION.
//===========================================================================
class APP : public APPLICATION
{
private:
    GRAPHICS        _graphics;
    FONT            _font;  
    
public:    
    BOOL Init();
    BOOL Shutdown();
    BOOL Frame();
};

//-----------------------------------------------------------------------------
// Initialize graphics, set display mode, create font object.
//-----------------------------------------------------------------------------
BOOL APP::Init()
{    
    
// initialize graphics
    if (! _graphics.Init())
        
return FALSE;    

    
// set display mode for graphics
    if(! _graphics.Set_Mode(Get_Hwnd(), TRUE, TRUE, 400, 400, 32))
        
return FALSE;

    
// create font object
    if(! _font.Create(&_graphics, "Segoe Script", 32))
        
return FALSE;

    
return TRUE;
}

//-----------------------------------------------------------------------------
// Release all d3d resource.
//-----------------------------------------------------------------------------
BOOL APP::Shutdown()
{
    
return TRUE;
}

//-----------------------------------------------------------------------------
// Render a frame.
//-----------------------------------------------------------------------------
BOOL APP::Frame()
{    
    
// clear display with specified color
    _graphics.Clear(D3DCOLOR_RGBA(0, 0, 0, 255), 1.0);

    
// begin scene
    if(_graphics.Begin_Scene())
    {
        
// draw text
        _font.Print("How are you, cloud?", 0, 0, _graphics.Get_Width(), _graphics.Get_Height(), 
                    0xFFFFFFFF, DT_CENTER | DT_VCENTER);
     
        
// end the scene
        _graphics.End_Scene();       
    }

    
// display video buffer
    _graphics.Display();
    
    
return TRUE;
}

int PASCAL WinMain(HINSTANCE inst, HINSTANCE, LPSTR cmd_line, int cmd_show)
{
    APP app;

    
return app.Run();
}

運(yùn)行截圖:


posted on 2007-09-04 17:58 lovedday 閱讀(349) 評(píng)論(0)  編輯 收藏 引用


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


公告

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

隨筆分類(178)

3D游戲編程相關(guān)鏈接

搜索

最新評(píng)論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品免费观看| 老司机免费视频一区二区三区 | 久久亚洲欧美| 午夜精品剧场| 欧美区一区二区三区| 狂野欧美激情性xxxx欧美| 国产精品毛片一区二区三区| 欧美激情精品| 怡红院av一区二区三区| 午夜在线成人av| 香蕉av777xxx色综合一区| 欧美精品v日韩精品v国产精品 | 国产精品久久久久国产精品日日| 免费试看一区| 在线观看视频日韩| 久久成人免费视频| 欧美在线一级视频| 国产精品久久久亚洲一区| 亚洲国产成人在线播放| 韩国精品久久久999| 午夜精品网站| 久久精品一区中文字幕| 国产婷婷色综合av蜜臀av| 亚洲视频免费在线| 亚洲尤物在线视频观看| 欧美天堂在线观看| 亚洲精品久久在线| 亚洲精品一区二区三区樱花 | 欧美成人嫩草网站| 欧美黄色aaaa| 亚洲欧洲日夜超级视频| 免费中文字幕日韩欧美| 亚洲国产成人精品女人久久久| 在线看国产日韩| 久久综合亚州| 91久久精品美女高潮| 亚洲精品综合精品自拍| 欧美日韩一区二区精品| 亚洲午夜精品一区二区三区他趣| 亚洲一区在线看| 国产亚洲一本大道中文在线| 欧美在线播放| 亚洲丰满少妇videoshd| 亚洲视频免费观看| 国产欧美在线播放| 久久久久久久久久久久久久一区| 欧美国产精品人人做人人爱| 9i看片成人免费高清| 国产精品黄色在线观看| 久久国产精品99久久久久久老狼| 米奇777超碰欧美日韩亚洲| 日韩午夜高潮| 国产农村妇女精品| 免费看的黄色欧美网站| 妖精成人www高清在线观看| 欧美诱惑福利视频| 亚洲黄色影院| 国产精品视频xxx| 久久久久久久999精品视频| 亚洲第一毛片| 亚洲欧美激情在线视频| 极品日韩久久| 欧美三区在线观看| 久久久99国产精品免费| 亚洲精品永久免费| 久久久久综合一区二区三区| 日韩香蕉视频| 黑人巨大精品欧美一区二区| 欧美日韩成人免费| 欧美一区二区在线免费观看| 亚洲激情偷拍| 久久先锋资源| 亚洲综合日本| 亚洲精品免费电影| 韩国欧美一区| 国产精品一区二区在线观看| 欧美激情一区二区三区成人| 久久精品国产久精国产爱| 99精品热视频只有精品10| 欧美多人爱爱视频网站| 久久精品91久久久久久再现| 一区二区三区免费在线观看| 韩国av一区| 国产女主播一区二区三区| 欧美激情在线播放| 欧美不卡高清| 免费成人小视频| 久久er99精品| 亚洲欧美大片| 一区二区三区欧美亚洲| 亚洲人人精品| 亚洲国产精品va在线观看黑人| 久久久国产视频91| 小黄鸭精品aⅴ导航网站入口| 亚洲最新视频在线| 亚洲精品视频二区| 亚洲激情校园春色| 最新国产成人av网站网址麻豆| 国产亚洲一区二区三区在线观看| 国产精品乱码| 国产精品每日更新在线播放网址| 欧美日韩美女在线| 欧美日本韩国| 欧美日韩精品二区| 欧美日韩精品中文字幕| 欧美激情久久久久久| 免费欧美在线| 欧美激情亚洲另类| 欧美理论电影网| 欧美日韩免费一区二区三区| 欧美久久一区| 欧美日韩在线亚洲一区蜜芽| 欧美日韩精品二区| 欧美日韩一区不卡| 国产精品乱人伦中文| 国产精品免费aⅴ片在线观看| 国产精品日韩久久久| 国产亚洲成av人片在线观看桃| 国产在线高清精品| 影音先锋久久| 亚洲精品久久久久久久久久久久| 亚洲精品午夜精品| 亚洲一区在线直播| 欧美在线视频导航| 蜜臀av一级做a爰片久久| 欧美成人免费全部观看天天性色| 欧美a级片一区| 亚洲精品中文字幕女同| 在线亚洲自拍| 欧美在线播放| 欧美99在线视频观看| 欧美日韩色婷婷| 国产情人节一区| 在线精品高清中文字幕| 日韩亚洲欧美一区| 欧美一区二区三区视频在线| 久久综合网络一区二区| 亚洲精品国产精品国自产观看| 99热在这里有精品免费| 欧美一级播放| 欧美国产日韩视频| 国产精品夜夜嗨| 狠狠网亚洲精品| 一本大道久久a久久精品综合| 欧美一区二区精品在线| 欧美国产精品日韩| 一本久久a久久精品亚洲| 欧美在线视频a| 欧美日韩国产在线播放| 国模吧视频一区| 夜夜爽夜夜爽精品视频| 久久久人成影片一区二区三区观看 | 久久阴道视频| 欧美视频一区在线观看| 影音先锋久久久| 午夜精品久久久久久99热| 蜜桃久久av一区| 亚洲欧美欧美一区二区三区| 蜜臀久久99精品久久久画质超高清| 欧美视频成人| 亚洲日本乱码在线观看| 久久精品国产91精品亚洲| 亚洲日本免费| 久久精品首页| 国产精品日韩精品欧美精品| 日韩视频―中文字幕| 麻豆精品传媒视频| 午夜在线精品| 欧美午夜a级限制福利片| 亚洲人成毛片在线播放| 久久一区二区精品| 午夜精品理论片| 欧美色视频一区| 日韩图片一区| 亚洲国内精品| 久久伊人精品天天| 国产亚洲欧美另类一区二区三区| 亚洲天堂av综合网| 日韩视频一区二区三区在线播放免费观看| 久久久久久久一区| 精品成人久久| 免费视频一区二区三区在线观看| 欧美一区二区三区四区在线观看地址 | 亚洲国产另类久久久精品极度| 欧美在线你懂的| 国产日韩一区二区三区| 欧美一级大片在线观看| 亚洲一区二区三区在线观看视频| 欧美日韩理论| 亚洲一区二区三区四区在线观看| 亚洲人成小说网站色在线| 欧美1区2区| 亚洲精品欧美激情| 亚洲人成亚洲人成在线观看图片 | 久久精品国产999大香线蕉| 中文国产成人精品| 国产精品视频观看| 欧美在线三区| 久久久www| 亚洲欧洲精品一区二区三区不卡|