我的任务是为学校项目制作一个小游戏。图片框,由一个计时器移动来移动敌人。如果表格中有大约5或6个移动图片框,我的应用程序会遇到麻烦和滞后。在我杀死了一些敌人(从表格/面板的控件集合中移除它们)之后它恢复顺畅。
我认为敌人运动的循环过于复杂,但我不知道如何使这更简单。
Private Sub TimerEnemyMovement_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerEnemyMovement.Tick
For Each Enemy As Control In PanelBackground.Controls
If Enemy.Name.Substring(0, 5) = "Enemy" Then
_enemy.MoveEnemy(Enemy, 2)
End If
Next
End Sub
我也考虑过多线程,但不确定这会解决问题,还有一个问题是我无法访问我的mainform的控件。
你知道,我对vb.net没了太多了解
如何解决这种滞后的想法?
答案 0 :(得分:2)
试试这个:
Private Sub TimerEnemyMovement_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TimerEnemyMovement.Tick
SuspendLayout()
For Each Enemy As Control In PanelBackground.Controls
If Enemy.Name.Substring(0, 5) = "Enemy" Then
_enemy.MoveEnemy(Enemy, 2)
End If
Next
ResumeLayout()
End Sub
答案 1 :(得分:0)
VB.NET WinForm应用程序不是创建游戏或移动对象的理想设置。你发现,表格的绘画使用了很多表现。
尝试迁移到VB.NET WPF(Windows Presentation Framework)应用程序,它可以更好地处理图形。
答案 2 :(得分:0)
只是提出一些可能会提高速度的建议
a)如何将它们存储在数组/列表中,而不是通过所有控件 b)旧的游戏技巧是在内存中绘制场景然后将其复制到屏幕..所以为什么没有内存位图(或图形)将“敌人”绘制到此,然后一旦完成就复制到整个bmp到屏幕
答案 3 :(得分:0)
所有敌人是否需要同时移动?有些行动更快吗?
如果有6个敌人,你可以在第一个刻度上移动1,3,5,然后在下一个刻度上移动2.4.6等。
答案 4 :(得分:0)
我一直在使用XNA创建一个简单的游戏,它真的很酷。虽然VB.NET没有得到官方支持,但你可以使它工作。它针对风景和大量动画对象进行了优化。