DX9显示文字-------VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(14)

DX9显示文字

创建Form1,输入以下源码:

Private Sub Form_Load()

'新手注意:游戏编程中,
'通常将窗体的 BorderStyle 设置为“Fixed single”即不允许改变窗体大小
'通常将窗体的 MinButton 设置为“True”即允许最小化
'通常将窗体的 MaxButton 设置为“False”即禁止最大化

  '初始化引擎并设置引擎初始化窗体和引擎分辨率,但最好是电脑常用的分辨率比如 640,480 、 800,600 、 1024,768 、 1366,768
CWVBDX9Initialization Me, 800, 600, CW_Windowed
  '初始化引擎(目标窗体,横向分辨率,纵向分辨率,窗口模式/全屏模式)

Dim FontDemo1 As CWFont, FontDemo2 As CWFont, FontDemo3 As CWFont    '定义CoolWind引擎字体变量
Const HelloWorld$ = "Hello World!"

    CWLoadFont FontDemo1, "SimSun", 32, CWF_Bold, False
    CWLoadFont FontDemo2, "@SimHei", 32, CWF_Normal, False
    CWLoadFont FontDemo3, "Microsoft YaHei", 64, CWF_Normal, False
    '载入字体(字体变量,字体类型,字体大小,是否为粗体,是否为斜体)
        '注意:载入的字体类型必须是正在运行该游戏的系统上存在的字体.否则将默认按"宋体"载入
        '小技巧:在大多数字体名前加上@可以让字体横过来~!
    
    Do While CWGameRun = True         '进入游戏循环
    
    If CWD3DDevice9.TestCooperativeLevel = 0 And Me.WindowState <> 1 Then  '检测是否可以渲染(设备正常并且窗体未最小化时渲染)
    CWBeginScene    '准备好绘制场景
        CWPaintPicBegin
        
        CWPrintFont FontDemo1, CWFPS, 0, 0, 800, 60, CWWhite, CWF_LeftAl    '显示当前FPS
        CWPrintFont FontDemo1, "队长~   是我~!", 0, 100, 800, 60, CWCyan, CWF_LeftAl
        CWPrintFont FontDemo2, "      别开枪        ", 0, 100, 800, 60, CWRed, CWF_LeftAl
        '输出字体(字体,目标文字,显示起点横坐标,显示起点纵坐标,显示区宽度,显示区高度,字体颜色,对齐方式)
               '注意:文字总长度超过显示区宽度将引起换行.   文字总长度超过显示区高度将引起裁剪,即超过部分不显示.
        Dim CX&, CY&    '计算文本显示大小,并绘制文本边框。
        CWCalcrFont FontDemo3, HelloWorld, CX, CY, True
        CWPrintFont FontDemo3, HelloWorld, 400 - CX * 0.5!, 300, CX, CY, CWYellow, DT_SINGLELINE Or DT_NOCLIP
        CWDrawHRect 400 - CX * 0.5!, 300, CX, CY, CWBlue
        
        CWPaintPicEnd
     CWPresentScene   '呈现绘制的场景

'*******************************以下为固定写法,不要轻易改动***********************************
    Else                 '当不满足渲染条件时
        CWResetDevice       '修复设备
    End If

    Loop

        CWVBDX9Destory     '销毁CoolWind引擎
    End '退出
'*******************************以上为固定写法,不要轻易改动***********************************


End Sub

BAS还是有之前的。
显示效果如下:
绘制文字
ID3DXFont接口:ID3DXFont接口封装了在特定设备上渲染特定字体所需的纹理和资源。
ID3DXFont接口具有以下方法:
ID3DXFont接口具有以下方法
通过调用D3DXCreateFont或D3DXCreateFontIndirect获得ID3DXFont接口。
LPD3DXFONT类型定义为指向ID3DXFont接口的指针。
C++调用:

typedef interface ID3DXFont ID3DXFont;
typedef interface ID3DXFont *LPD3DXFONT;

在VB6中调用如下:

Public CWFontList() As D3DXFont, CWFontNum As Long 
 D3DXCreateFontW CWD3DDevice9, FSize, 0, FBold, 0, FItalic, 1, 0, 4, 0, FName,  CWFontList(CWFontNum) '创建字体

其中, D3DXCreateFontW:为设备和字体创建字体对象。
C++调用原型:

HRESULT D3DXCreateFont(
  _In_  LPDIRECT3DDEVICE9 pDevice,//指向IDirect3DDevice9接口的指针,与字体对象关联的设备。
  _In_  INT               Height,//逻辑单元中字符的高度。
  _In_  UINT              Width,//逻辑单元中字符的宽度。
  _In_  UINT              Weight,//字体粗细。
  _In_  UINT              MipLevels,//mipmap级别的数目。
  _In_  BOOL              Italic,//斜体为True,否则为false。
  _In_  DWORD             CharSet,//字体的字符集。
  _In_  DWORD             OutputPrecision,//指定Windows应如何尝试将所需的字体大小和特征与实际字体相匹配。例如,使用OUT_TT_ONLY_PRECIS,以确保始终获得TrueType字体。
  _In_  DWORD             Quality,//指定Windows应如何将所需字体与实际字体匹配。它仅适用于光栅字体,不应影响TrueType字体。
  _In_  DWORD             PitchAndFamily,//音高和系列索引。
  _In_  LPCTSTR           pFacename,//包含字体名称的字符串。如果编译器设置需要Unicode,则数据类型LPCTSTR解析为LPCWSTR。否则,字符串数据类型解析为LPCSTR。参见备注。
  _Out_ LPD3DXFONT        *ppFont//返回指向ID3DXFont接口的指针,该接口表示创建的字体对象。
);

D3DXFont各个方法说明如下:
1,ID3DXFont::OnLostDevice:使用此方法释放对视频内存资源的所有引用并删除所有状态块。每当设备丢失或重置设备之前,应调用此方法。
C++调用:

HRESULT OnLostDevice();

在VB6中调用:

If CWFontNum > 0 Then
    For I = 1 To CWFontNum
        CWFontList(I).OnLostDevice
    Next
    End If

2,ID3DXFont::OnResetDevice:使用此方法重新获取资源并保存初始状态。
C++调用:

HRESULT OnResetDevice();

在VB6中调用:

If CWFontNum > 0 Then
For I = 1 To CWFontNum
      CWFontList(I).OnResetDevice
    Next
End If

3,ID3DXFont::DrawText:绘制格式化文本。此方法支持ANSI和Unicode字符串。
C++调用:

INT DrawText(
  [in] LPD3DXSPRITE pSprite,//指向包含字符串的ID3DXPrite对象的指针。可以为NULL,在这种情况下,Direct3D将使用自己的sprite对象呈现字符串。为了提高效率,如果要在一行中多次调用DrawText,则应指定sprite对象。
  [in] LPCTSTR      pString,//指向要绘制的字符串的指针。如果Count参数为-1,则字符串必须以null结尾。
  [in] INT          Count,//指定字符串中的字符数。如果Count为-1,则pString参数假定为指向以null结尾的字符串的指针,DrawText将自动计算字符数。
  [in] LPRECT       pRect,//指向RECT结构的指针,该结构包含要格式化文本的逻辑坐标中的矩形。矩形右侧的坐标值必须大于其左侧的坐标值。同样,底部的坐标值必须大于顶部的坐标值。
  [in] DWORD        Format,//指定设置文本格式的方法。它可以是以下值的任意组合:
  [in] D3DCOLOR     Color//文本的颜色。有关更多信息,请参阅D3DCOLOR。
);

其中 文字格式Format组合如下:
文字格式组合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gosub60

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值