2010-05-31 57 views
3

我的使命是爲學校項目製作一個小型遊戲。圖片框,通過定時器移動來移動敵人。如果在表格中有大約5或6個移動圖片框,我的應用程序會遇到麻煩和滯後。殺死一些敵人後(將它們從Form/Panel的Controls集合中刪除)它會恢復平滑。vb.net移動物體的更多性能

我認爲敵方運動的循環過於複雜,但我不知道如何簡化。

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

您是否使用WinForms? – 2010-05-31 20:13:08

+0

你有多少次定時開火,即它的間隔時間是多少? – 2010-05-31 20:14:20

回答

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 
+0

此外,我認爲你可以使用UpdateBegin()只是面板,以避免阻塞所有佈局(我認爲!) – 2010-05-31 21:33:14

+0

究竟是什麼? – 2010-06-01 12:13:26

+0

@Rene - 它讓形式等待重繪,直到所有敵人的運動都被確定了,所以它可以做一次刷新而不是幾次。 – 2010-06-01 13:06:13

0

VB.NET WinForm應用程序不是創建遊戲或移動對象的理想設置。正如你所發現的那樣,表格的繪畫使用了很多性能。

嘗試轉移到VB.NET WPF(Windows Presentation Framework)應用程序,它可以更好地處理圖形。

+2

我可能不會主張將WPF用於「初學者」學校項目。它引入了很多可能與手頭練習無關的其他複雜性。與WinForms相比,WPF具有相當陡峭的學習曲線。 – 2010-05-31 20:19:49

+0

我知道它不是爲遊戲而製作的。但那是我的運動。 但我發佈我的問題後,我看到不移動的對象是問題。這是背景。我有一個背景圖像,敵人是透明背景的GIF動畫。看來,WinForms無法處理這種好事。 – 2010-05-31 20:27:57

+0

我在VB6中使用了這種技術(移動PictureBoxes)很多次,它很簡單。最後一次我嘗試了它是VB.NET 2003.它沒問題,但性能不是很好(但也許我們的舊計算機必須更努力地運行.NET?)。我從那時起就沒有嘗試過,但我感到驚訝它會變得更糟(我們有超過5-6個精靈,但也許我們的邏輯更簡單......)。 – FrustratedWithFormsDesigner 2010-05-31 20:39:44

0

只是一對夫婦的建議,可能提高速度

一個),而不是通過所有控件經歷,如何將它們存儲在一個數組/列表 b )舊的遊戲技巧是在內存中繪製場景,然後將其複製到屏幕上..所以爲什麼沒有內存位圖(或圖形)將「敵人」繪製到此處,然後複製到整個bmp以便在完成所有操作後進行屏幕顯示

+0

嗯......你對陣列的建議很有道理。我試過了。但我沒有找到一種方法在vb.net中進行引用,例如在c#中。 – 2010-06-01 12:17:34

0

做所有的敵人n同時移動?做一些更快的行動?

如果有6個敵人,你可以在第一跳就下蜱等

移動1,3,5,然後2.4.6?

0

我一直在使用XNA創建一個簡單的遊戲,它非常酷。雖然VB.NET沒有正式的支持,但你可以使它工作。它針對風景和大量動畫對象進行了優化。