输入并运行以下代码,窗口显示出程序运行了多少秒:
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
Dim 开始时间 As Double = Now()
Dim 当前时间 As Double
Do '循环执行
gg.Cls
gg.Font "黑体", 20
当前时间 = Now()
gg.DrawString 100,100,"程序运行了" & DateDiff("s",开始时间,当前时间) & "秒"
gg.Redraw
Sleep 20
Loop
End Sub

首先定义两个用于计时的变量
Dim 开始时间 As Double
Dim 当前时间 As Double
程序开始运行时获得当前时刻:
Dim 开始时间 As Double= Now()
在do循环语句中,再次获得程序运行到此的时刻:
当前时间 = Now()
用 DateDiff 函数计算时间差,即可得到程序一共运行了多少秒:
DateDiff("s",开始时间,当前时间)
进一步修改代码带进度条如下:
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
Dim 开始时间 As Double = Now()
Dim 当前时间 As Double
Dim maxTime As Long =20 ' 游戏允许的总时长
Dim remainTime As Long = maxTime ' 游戏剩余时间
Dim 窗口宽度 As Long = DpiUnScaleI(Form1.ScaleWidth)
Do '循环执行
gg.Cls
gg.Brush BGR(255, 0, 0) 'GDI的颜色值。
remainTime = maxTime - DateDiff("s", 开始时间, 当前时间)
If remainTime < 0 Then
remainTime = 0
Else
gg.DrawFrame 0, 0, 窗口宽度/maxTime * remainTime ,20
End If
gg.Font "黑体", 20
当前时间 = Now()
gg.DrawString 100, 100, "程序运行了" & DateDiff("s", 开始时间, 当前时间) & "秒"
gg.Redraw
Sleep 20
Loop
End Sub

然而发现进度条一秒跳一次,不够丝滑,我们改用代码。
Sub 游戏执行过程(hWndForm As hWnd)
Dim gg As yGDI = hWndForm
Dim 开始时间 As ULong = GetTickCount
Dim 当前时间 As ULong
Dim maxTime As Single =20 ' 游戏允许的总时长
Dim remainTime As Single
Dim 窗口宽度 As Long = DpiUnScaleI(Form1.ScaleWidth)
Do '循环执行
gg.Cls
gg.Brush BGR(255, 0, 0) 'GDI的颜色值。
当前时间 = GetTickCount
remainTime = maxTime - (当前时间-开始时间)/1000
If remainTime < 0 Then
remainTime = 0
Else
gg.DrawFrame 0, 0, 窗口宽度/maxTime * remainTime ,20
End If
gg.Font "黑体", 20
gg.DrawString 100, 100, "程序运行了" & Int((当前时间-开始时间)/1000) & "秒"
gg.Redraw
Sleep 20
Loop
End Sub
其中 GetTickCount 是系统API,获取系统开机以来的时间,毫秒为单位。有了毫秒级别,进度跳是丝滑了。下面我们把进度跳加入到游戏中。
全局变量
Dim Shared maxTime As Single =20 ' 游戏允许的总时长
Dim Shared remainTime As ULong '开始时间
其中,变量maxTime记录游戏允许的总时长,remainTime记录游戏开始时间
在start()初始化函数中,加大窗口高度用于显示倒计时进度条,并对时间变量进行初始化:
remainTime = GetTickCount()
最后在show( )函数中添加代码绘制出倒计时进度条:
Dim 窗口宽度 As Long = DpiUnScaleI(Form1.ScaleWidth)
gg.Brush BGR(255, 0, 0) 'GDI的颜色值。
Dim tt As Single = maxTime - (GetTickCount - remainTime) / 1000
If tt < 0 Then
tt = 0
Else
gg.DrawFrame 0, 230, 窗口宽度 / maxTime * tt, 20
End If

评论一下?