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

DX9旋转文字

新建Form1,输入以下源码:

Option Explicit     '变量使用前必须声明
'新手注意:使用前请确保 DX9VB.TLB组件已被引用,VBDX9BAS.bas模块已被添加

Const TestText$ = "Cool Wind 2D" & vbNewLine & "文字旋转测试"
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 FontDemo As CWFont    '定义CoolWind引擎字体变量
Dim FontRoll As Single

    CWLoadFont FontDemo, "Microsoft YaHei", 32, CWF_Normal, False
    '载入字体(字体变量,字体类型,字体大小,是否为粗体,是否为斜体)
        '注意:载入的字体类型必须是正在运行该游戏的系统上存在的字体.否则将默认按"宋体"载入
        '小技巧:在大多数字体名前加上@可以让字体横过来~!
    
    Do While CWGameRun = True         '进入游戏循环
    
    If CWD3DDevice9.TestCooperativeLevel = 0 And Me.WindowState <> 1 Then  '检测是否可以渲染(设备正常并且窗体未最小化时渲染)
    CWBeginScene CWColorRGBA(255, 240, 200)  '准备好绘制场景
        CWPaintPicBegin
        
        Dim rcos!, rsin!
        rcos = Cos(FontRoll)
        rsin = Sin(FontRoll)
        
        ' 注意:修改WorldTransform会对接下来的所有绘制产生改变,直到再次修改。
        With WorldTransform     ' 自定义世界变换(顺时针旋转)
            ' m11 为X缩放,m22为Y缩放,m12是X到Y切变,m21是Y到X切变。
            ' 当缩放为余弦(同±)且切变为正弦(异±)时,就可以实现旋转效果。
            ' 注:两个sin的±关系决定旋转方向,顺时针为+-,逆时针为-+。
            .m11 = rcos: .m12 = rsin
            .m21 = -rsin: .m22 = rcos
            .mdx = 200!: .mdy = 150!    ' 旋转后的平移量(注:这里才是真正的最终输出坐标)
        End With
        PrintFontEx FontDemo, CWHA_Red, CWGreen, CWBlue
        
        With WorldTransform     ' 自定义世界变换(逆时针旋转)
            .m11 = rcos: .m12 = -rsin
            .m21 = rsin: .m22 = rcos
            .mdx = 200!: .mdy = 350!    ' 旋转后的平移量(注:这里才是真正的最终输出坐标)
        End With
        PrintFontEx FontDemo, CWHA_Blue, CWRed, CWGreen
        
        ' 其它测试
        With WorldTransform     ' 自定义世界变换
            .m11 = rcos: .m12 = rsin
            .m21 = rsin: .m22 = rcos
            .mdx = 400!: .mdy = 150!
        End With
        PrintFontEx FontDemo, CWHA_Purple, CWYellow, CWCyan
        
        With WorldTransform     ' 自定义世界变换
            .m11 = rcos: .m12 = -rsin
            .m21 = -rsin: .m22 = rcos
            .mdx = 400!: .mdy = 350!
        End With
        PrintFontEx FontDemo, CWHA_Cyan, CWPurple, CWYellow
        
        With WorldTransform     ' 自定义世界变换
            .m11 = rcos: .m12 = rsin
            .m21 = rsin: .m22 = rcos
            .mdx = 600!: .mdy = 150!
            PrintFontEx FontDemo, CWHA_Orange, CWkelly, CWFuchsia
            .m21 = -.m21
            PrintFontEx FontDemo, CWHA_Violet, CWTurquoise, CWCyanine
        End With
        
        With WorldTransform     ' 自定义世界变换
            .m11 = rcos: .m12 = -rsin
            .m21 = -rsin: .m22 = rcos
            .mdx = 600!: .mdy = 350!
            PrintFontEx FontDemo, CWHA_kelly, CWFuchsia, CWOrange
            .m21 = -.m21
            PrintFontEx FontDemo, CWHA_Turquoise, CWViolet, CWCyanine
        End With
        
        With WorldTransform     ' 自定义世界变换
            .m11 = rcos: .m12 = 0!
            .m21 = 0!: .m22 = 1!
            .mdx = 200!: .mdy = 550!
        End With
        PrintFontEx FontDemo, CWHA_Green, CWBlue, CWRed
        
        With WorldTransform     ' 自定义世界变换
            .m11 = 1!: .m12 = 0!
            .m21 = 0!: .m22 = rcos
            .mdx = 400!: .mdy = 550!
        End With
        PrintFontEx FontDemo, CWHA_Yellow, CWCyan, CWPurple
        
        With WorldTransform     ' 自定义世界变换
            .m11 = rcos: .m12 = 0!
            .m21 = 0!: .m22 = rcos
            .mdx = 600!: .mdy = 550!
        End With
        PrintFontEx FontDemo, CWHA_kelly, CWCyanine, CWFuchsia
        
        FontRoll = FontRoll + 0.05!
        If FontRoll > Pi Then FontRoll = FontRoll - 2! * Pi
        
        ' 设置世界变换为单位矩阵(重置为原始状态)
        WorldTransform = MatrixIdentity
        CWPrintFontTop FontDemo, "FPS: " & CWFPS, 10, 10, 800, 60, CWViolet, CWF_LeftAl  '显示当前FPS
        
        CWPaintPicEnd
     CWPresentScene   '呈现绘制的场景

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

    Loop

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


End Sub

Private Sub PrintFontEx(FontDemo As CWFont, ByVal BackColor As CWColorConstants, ByVal TextColor As CWColorConstants, ByVal EdgeColor As CWColorConstants)
    Dim CX&, CY&    '计算文本显示大小,并绘制文本边框。
    CWCalcrFont FontDemo, TestText, CX, CY, False
    ' 提示:绘图函数的原始坐标为输入坐标(此坐标为旋转前,可用于定位旋转点)
    ' (0, 0)坐标表示绕左上角旋转,(-宽度, -高度)坐标表示绕右下角旋转,(-0.5 * 宽度, -0.5 * 高度)坐标表示绕中心点旋转。
    CWPrintFontTop FontDemo, TestText, CX * -0.5!, CY * -0.5!, CX, CY, TextColor, DT_CENTER Or DT_NOCLIP
    CX = CX + 6: CY = CY + 4
    CWDrawSRect CX * -0.5!, CY * -0.5!, CX, CY, BackColor
    CWDrawHRect CX * -0.5!, CY * -0.5!, CX, CY, EdgeColor
End Sub

BAS依旧是之前的。
显示的效果如下:
文字旋转

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gosub60

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

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

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

打赏作者

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

抵扣说明:

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

余额充值