VisualFreeBasic游戏趣味编程_7.5_时间控制的改进

2026-1-22 / 0 评论 / 40 阅读

之前代码通过在updateWithoutInput()函数中调用Sleep()函数来降低小蛇的移动速度。然而Sleep()函数运行时,整个程序都会暂停,包括用户输入模块。用户会感觉到卡顿,明明按了键,小蛇却没有反应。

为了解决这一问题,这一节介绍动态变量、静态变量的概念。输入并运行以下代码:

Sub fun() 
   Dim m As Long 
   m += 1
   Print m
End Sub

Sub 游戏执行过程(hWndForm As hWnd)
   fun()
   fun()
   fun()
End Sub

程序运行后输出:

1
1
1

函数中定义的变量默认为动态变量,程序从变量的作用域开始,为其动态分配内存空间;到变量的作用域结束,动态收回变量的内存空间。

主函数中第一次调用fun()时,动态分配内存空间,m初始化为0,加1,输出,fun()运行结束,程序收回m的内存空间。第二次调用fun(),继续动态分配m的内存空间,m初始化为0,加1,输出1,收回内存空间。第三次调用也输出1。

用关键词static修饰的变量称为静态变量,即程序开始运行时就为其分配内存空间,直到程序运行完收回,修改代码如下:

Sub fun() 
   Static m As Long 
   m += 1
   Print m
End Sub

程序运行后输出:

1
2
3

程序运行后为m分配内存空间,并初始化为0。主函数中第一次调用fun()时,m加1,输出1,fun()运行结束,程序不收回m的内存空间。第二次调用fun(),m继续加1,输出2。第三次调用输出3。

利用静态变量,将updateWithoutInput( )修改如下:

Sub updateWithoutInput(moveDirection As String) '与输入无关的更新
   Static waitIndex As Long = 1  ' 静态局部变量,初始化时为1
   waitIndex += 1  '每一帧+1
   If waitIndex =10 Then '等于10才执行,这样小蛇每隔10帧移动一次
      moveSnake(moveDirection) '调用小蛇移动函数
      waitIndex =1  '再变成1
   End If    
   Sleep 10  '暂停若干毫秒
End Sub

其中,waitIndex为静态变量,程序运行后初始化为1。updateWithoutInput()每次运行时,waitIndex加1,每隔10帧,才执行一次小蛇移动函数moveSnake()。这样可在不影响用户按键输入的情况下,降低小蛇的移动速度。

评论一下?

OωO
取消