C# windows窗体应用程序中的多个计时器

C# windows窗体应用程序中的多个计时器,c#,visual-studio-2010,timer,C#,Visual Studio 2010,Timer,我试图在c#visual studio 2010中创建一个小游戏。 我试图在windows窗体应用程序中制造类似于游戏泡泡的麻烦 我用工具箱中的3个计时器创建了一个表单。 一个用于球员的移动(他通过改变标签的图像来移动他的腿)-此计时器设置为事件OnKeyDown时启用,事件onKeyUp时停止 拍摄的第二个计时器当按下空格键时,此计时器在事件“onKeyPress”时设置为启用。这个计时器是用来一块一块地画射击线的 第三个计时器是球员应该弹出的球-这个计时器总是在运行,它的作用是移动球 但我发

我试图在c#visual studio 2010中创建一个小游戏。 我试图在windows窗体应用程序中制造类似于游戏泡泡的麻烦

我用工具箱中的3个计时器创建了一个表单。 一个用于球员的移动(他通过改变标签的图像来移动他的腿)-此计时器设置为事件OnKeyDown时启用,事件onKeyUp时停止

拍摄的第二个计时器当按下空格键时,此计时器在事件“onKeyPress”时设置为启用。这个计时器是用来一块一块地画射击线的

第三个计时器是球员应该弹出的球-这个计时器总是在运行,它的作用是移动球

但我发现的问题是,当我增加球计时器的间隔时——然后当其他计时器设置为enabled时,它们都变得非常慢


我能做些什么来解决这个问题呢?

我建议重新分解一下代码,如下所示:

  • 更改模块级状态变量的值,而不是在keydown和keyup事件中启用和禁用计时器 例如:

    拍摄键的向下键可以执行以下操作:

    _shootKeyDown = True
    
    _shootKeyDown = False
    
    拍摄关键点的keyup可以执行以下操作:

    _shootKeyDown = True
    
    _shootKeyDown = False
    
    然后,您可以在一个计时器事件中处理所有需要更新的元素,该事件以任意间隔发生

    If _shootKeyDown Then
        ...
    End If
    
    If _playerDirection <> "" Then
        ...
    End If
    
    If _ballExists Then
        ...
    End If
    
    如果_shootKeyDown然后
    ...
    如果结束
    如果播放方向为“”,则
    ...
    如果结束
    如果存在,那么
    ...
    如果结束
    
    你能发布你的代码吗?您可能想签出
    System.Timers.Timer
    而不是
    System.Windows.Forms.Timer
    。我不确定WinForms命名空间计时器是否有您所描述的一些奇怪的限制……在增加ball计时器的间隔期间,您是否经历过延迟?这也可能是由高内存成本造成的。