Hallo Leute, ich komme mit einem Problem nicht weiter.
Kurze Erklärung des noch relativ "einfachen" Programms:
Es gibt einen Button, und mit jedem Klick auf den Button wird ein neues Objekt einer selbst erstellten Klasse "gegner" generiert. Das sind einfach Kreise mit einer Progressbar und die laufen mit konstanter Geschwindigkeit durch meine Form. Doch desto mehr Gegner ich hinzufüge, desto langsamer werden auch alle anderen. Ab ca. 30-40 Buttonklicks bewegt sich kaum noch etwas. Woran kann das liegen?
So sieht die Implementierung aus:
Die Form1:
Spoiler anzeigen
Level.startpoint ist dabei eine Location aus der Klasse "Level", die ich hier nicht aufführe da sie relativ simpel ist und nur Variablen beinhaltet.
So jetzt zur gegner Klasse
Spoiler anzeigen
Sorry falls der Code noch nicht professionell ist, bin Anfänger und nur am rumprobieren.
Aber dieses Problem kriege ich einfach nicht weg... Danke schonmal für eure Aufmerksamkeit!
Kurze Erklärung des noch relativ "einfachen" Programms:
Es gibt einen Button, und mit jedem Klick auf den Button wird ein neues Objekt einer selbst erstellten Klasse "gegner" generiert. Das sind einfach Kreise mit einer Progressbar und die laufen mit konstanter Geschwindigkeit durch meine Form. Doch desto mehr Gegner ich hinzufüge, desto langsamer werden auch alle anderen. Ab ca. 30-40 Buttonklicks bewegt sich kaum noch etwas. Woran kann das liegen?
So sieht die Implementierung aus:
Die Form1:
VB.NET-Quellcode
- Imports Microsoft.VisualBasic.PowerPacks
- Public Class Form1
- Dim lol As gegner
- Dim gegnercount As Integer = 1
- Dim canvas As ShapeContainer
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- canvas = New ShapeContainer
- canvas.Name = "OverallCanvas"
- canvas.Parent = Me
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- spawnNewEnemy()
- End Sub
- Private Sub spawnNewEnemy()
- lol = New gegner
- lol.zeichne(Me, Level.startpoint, enemycount, canvas)
- lol.startMoving()
- enemycount = enemycount + 1
- End Sub
Level.startpoint ist dabei eine Location aus der Klasse "Level", die ich hier nicht aufführe da sie relativ simpel ist und nur Variablen beinhaltet.
So jetzt zur gegner Klasse
VB.NET-Quellcode
- Imports Microsoft.VisualBasic.PowerPacks
- Public Class gegner
- Dim life As Integer = 100
- Dim speed As Integer = 20 ' Enemy speed
- Dim moveTimer As Timer
- Dim theShape As RectangleShape
- Dim lifebar As ProgressBar
- Dim startX As Integer
- Dim form As Form
- Dim startY As Integer
- Dim canvas As ShapeContainer
- Public Sub zeichne(ByVal pForm As Form, ByVal pSpawn As Point, ByVal pID As Integer, ByVal pCanvas As ShapeContainer)
- theShape = New RectangleShape
- form = pForm
- theShape.Parent = pCanvas
- theShape.Name = "enemy" & pID
- theShape.Size = New System.Drawing.Size(5, 5)
- theShape.Location = pSpawn
- theShape.CornerRadius = 12
- startX = pSpawn.X
- startY = pSpawn.Y
- lifebar = New ProgressBar
- lifebar.Parent = form
- lifebar.Size = New System.Drawing.Size(10, 5)
- lifebar.Name = "lifebarenemy" & pID
- lifebar.Location = New System.Drawing.Point(theShape.Location.X - 2.5, theShape.Location.Y - 5)
- lifebar.Value = life
- canvas = pCanvas
- End Sub
- Public Sub startMoving()
- moveTimer = New Timer()
- moveTimer.Interval = 10
- moveTimer.Start()
- AddHandler moveTimer.Tick, AddressOf moverek
- End Sub
- Public Sub moverek()
- If theShape.Location.X < 750 And theShape.Location.Y = startY Then
- move(theShape.Location.X + speed / 20, theShape.Location.Y)
- ElseIf theShape.Location.X > 749 And theShape.Location.Y > 400
- move(theShape.Location.X, theShape.Location.Y - speed / 20)
- ElseIf theShape.Location.X > 50 And theShape.Location.Y = 400
- move(theShape.Location.X - speed / 20, theShape.Location.Y)
- ElseIf theShape.Location.X < 51 And theShape.Location.Y > 200
- move(theShape.Location.X, theShape.Location.Y - speed / 20)
- ElseIf theShape.Location.X < 750 And theShape.Location.Y = 200
- move(theShape.Location.X + speed / 20, theShape.Location.Y)
- End If
- End Sub
- Public Sub move(ByVal pX As Integer, ByVal pY As Integer)
- theShape.Location = New System.Drawing.Point(pX, pY)
- lifebar.Location = New System.Drawing.Point(theShape.Location.X - 2.5, theShape.Location.Y - 5)
- End Sub
- End Class
Sorry falls der Code noch nicht professionell ist, bin Anfänger und nur am rumprobieren.
Aber dieses Problem kriege ich einfach nicht weg... Danke schonmal für eure Aufmerksamkeit!