Grüss euch Community
Dies ist mein erster Post, aber ich will direkt zur Sache kommen.
Ich habe da ein Problem. Ich will mittels vb.net ein einfaches Spiel programmieren. Eine Figur, die sich durch die Landschaft bewegen kann in X und Y Richtung.
(Und ja ich weiss, dass VB.NET nicht so ideal ist um ein Spiel zu machen, aber ich liebe die Herausforderung )
Klingt erstmal nicht spektakulär. Die Probleme aber, sind nicht ohne.
Ich habe für die Bewegung der Figur verschiedene Bilder, die nach und nach gezeichnet bzw. wieder entfernt werden. Dadurch entsteht der Eindruck, dass sich die Figur bewegt.
Der grosse Vorteil des direkten zeichnen auf die Form gegenüber einem Bild in der Picturebox ist ganz klar, dass wenn man ein anderes Objekt kreuzt, nicht der "unsichtbare" Hintergrund der Picturebox zu sehen ist.
Das Problem ist aber, dass das Bild nicht flüssig ist, sondern ein bisschen flackert. Weiss jemand, wie man das minimieren bzw. ganz vermeiden kann?
Ich erstelle sie im Form.paint event.
Ich wäre wirklich Froh, wenn mir jemand helfen könnte. Danke im Voraus!
Falls jemand nicht weiss für was das invalidate ist -> es dient dazu, die Form neu zu zeichnen. Und weil ich nicht will, dass alles wie wild flackert, zeichne ich nur das Rechteck neu, welches mein Objekt enthält.
Hier noch der Code:
Spoiler anzeigen
Dies ist mein erster Post, aber ich will direkt zur Sache kommen.
Ich habe da ein Problem. Ich will mittels vb.net ein einfaches Spiel programmieren. Eine Figur, die sich durch die Landschaft bewegen kann in X und Y Richtung.
(Und ja ich weiss, dass VB.NET nicht so ideal ist um ein Spiel zu machen, aber ich liebe die Herausforderung )
Klingt erstmal nicht spektakulär. Die Probleme aber, sind nicht ohne.
Ich habe für die Bewegung der Figur verschiedene Bilder, die nach und nach gezeichnet bzw. wieder entfernt werden. Dadurch entsteht der Eindruck, dass sich die Figur bewegt.
Der grosse Vorteil des direkten zeichnen auf die Form gegenüber einem Bild in der Picturebox ist ganz klar, dass wenn man ein anderes Objekt kreuzt, nicht der "unsichtbare" Hintergrund der Picturebox zu sehen ist.
Das Problem ist aber, dass das Bild nicht flüssig ist, sondern ein bisschen flackert. Weiss jemand, wie man das minimieren bzw. ganz vermeiden kann?
Ich erstelle sie im Form.paint event.
Ich wäre wirklich Froh, wenn mir jemand helfen könnte. Danke im Voraus!
Falls jemand nicht weiss für was das invalidate ist -> es dient dazu, die Form neu zu zeichnen. Und weil ich nicht will, dass alles wie wild flackert, zeichne ich nur das Rechteck neu, welches mein Objekt enthält.
Hier noch der Code:
VB.NET-Quellcode
- Public Class Form1
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- End Sub
- Dim i As Integer = 0
- Dim i2 As Integer = 0
- Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
- e.Graphics.DrawImage(My.Resources.visual_studio, 100, 100, 100, 100)
- 'e.Graphics.DrawImage(My.Resources.visual_studio, 100, 0, 50, 50)
- If richtung = 0 Then
- e.Graphics.DrawImage(My.Resources.indi0, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- Else
- If switchfigur = False Then
- If richtung = 1 Then
- e.Graphics.DrawImage(My.Resources.indi1, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- ElseIf richtung = 2 Then
- e.Graphics.DrawImage(My.Resources.indi3, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- Else
- e.Graphics.DrawImage(My.Resources.indi1, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- End If
- Else
- If richtung = 1 Then
- e.Graphics.DrawImage(My.Resources.indi2, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- ElseIf richtung = 2 Then
- e.Graphics.DrawImage(My.Resources.indi4, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- Else
- e.Graphics.DrawImage(My.Resources.indi2, 0 + (i * 10), 0 + (i2 * 10), 80, 100)
- End If
- End If
- End If
- End Sub
- Private Sub gehnachrechts()
- Me.Invalidate(New Rectangle(New Point(0 + (i * 10), 0 + (i2 * 10)), New Size(90, 100)))
- i += 1
- End Sub
- Dim richtung As Integer = 0
- Private Sub Button1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
- richtung = 1
- Timer1.Enabled = True
- End Sub
- Private Sub gehnachlinks()
- i -= 1
- Me.Invalidate(New Rectangle(New Point(0 + (i * 10), 0 + (i2 * 10)), New Size(90, 100)))
- End Sub
- Private Sub gehnachoben()
- i2 -= 1
- Me.Invalidate(New Rectangle(New Point(0 + (i * 10), 0 + (i2 * 10)), New Size(80, 110)))
- End Sub
- Private Sub stehenbleiben()
- Me.Invalidate(New Rectangle(New Point(0 + (i * 10), 0 + (i2 * 10)), New Size(80, 110)))
- Timer1.Stop()
- End Sub
- Private Sub gehnachunten()
- Me.Invalidate(New Rectangle(New Point(0 + (i * 10), 0 + (i2 * 10)), New Size(80, 110)))
- i2 += 1
- End Sub
- Dim switchfigur As Boolean = False
- Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
- If richtung = 1 Then 'rechts
- gehnachrechts()
- ElseIf richtung = 2 Then 'linkgs
- gehnachlinks()
- ElseIf richtung = 3 Then 'oben
- gehnachoben()
- ElseIf richtung = 4 Then 'unten
- gehnachunten()
- ElseIf richtung = 0 Then 'unten
- stehenbleiben()
- End If
- If switchfigur = False Then
- switchfigur = True
- Exit Sub
- End If
- If switchfigur = True Then
- switchfigur = False
- Exit Sub
- End If
- End Sub
- Private Sub Button1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseUp
- richtung = 0
- 'Timer1.Enabled = False
- End Sub
- Private Sub Button2_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseDown
- richtung = 2
- Timer1.Enabled = True
- End Sub
- Private Sub Button2_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseUp
- richtung = 0
- ' Timer1.Enabled = False
- End Sub
- Private Sub Button3_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button3.MouseDown
- richtung = 3
- Timer1.Enabled = True
- End Sub
- Private Sub Button3_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button3.MouseUp
- richtung = 0
- ' Timer1.Enabled = False
- End Sub
- Private Sub Button4_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button4.MouseDown
- richtung = 4
- Timer1.Enabled = True
- End Sub
- Private Sub Button4_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Button4.MouseUp
- richtung = 0
- ' Timer1.Enabled = False
- End Sub
- End Class
"Die menschliche Vorstellungskraft ist unendlich"
->Versuch dir mal 'ne neue Farbe auszudenken!
Mit Schleifen kann man alles lösen!
Dim d as Double = 1
Do until d = 0
d = (d / 2)
Loop ∞
->Versuch dir mal 'ne neue Farbe auszudenken!
Mit Schleifen kann man alles lösen!
Dim d as Double = 1
Do until d = 0
d = (d / 2)
Loop ∞
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „M-Stef“ ()