Nabend Community!
Bin dabei ein Spiel zu programmieren und bei der Bewegung und der Kollisionsüberprüfung hakt's... Ja, Google und SuFu hab ich schon geplagt - Erfolglos
Beschreibung:
Die Bewegung des Spielers (im Moment nur ein Kreis) werden durch Kraft-Angaben durchgeführt: Bei Tastendruck wird eine Sub der Klasse des Spielers ausgeführt, bei der dann ein Double-Wert angegeben wird, wie weit sich der Spieler nun bewegt.
Und die Kollisionsüberprüfung wird im Moment noch recht simpel gehandhabt, funktioniert aber auch irgendwie nicht... Wenn eine Kollision zustande kommt, wird die Richtung, in der sich der Spieler bewegt, umgekehrt - Irgendwie war's das auch schon und egal wie heftig ich in die Tasten hau, der Spieler bewegt sich 0.
Verwendete Programmiersprache und IDE
Visual Basic (Visual Studio 2010 Ultimate)
.Net Framework 2.0
Fehlermeldung:
Keine...
Bisheriger Code:
Spoiler anzeigen
Sonstige nützliche Informationen:
- Die Variablen "m_ForceNS" und "m_ForceWE" geben die aktuelle Geschwindigkeit nach oben/unten (North/South) und links/rechts (West/East) an.
- Die Variablen "m_Tail" und "m_Speed" sind für Bewegung und Kollision ohne Bedeutung. "m_Tail" speichert die Positionen des Spielers ab und ermöglicht die Anzeige eines "Schweifes" des Spielers auf dem Bildschirm. "m_Speed" ist eine Auflistung der Gesamtgeschwindigkeit und dient der Anzeige der Geschwindigkeit in einem Graph in einer anderen Form.
Wäre wirklich super, wenn mir jemand helfen könnte, ich habe langsam keine Ahnung mehr, wie ich das umsetzen soll :wacko:
MfG,
X-Zat / Momo
Bin dabei ein Spiel zu programmieren und bei der Bewegung und der Kollisionsüberprüfung hakt's... Ja, Google und SuFu hab ich schon geplagt - Erfolglos
Beschreibung:
Die Bewegung des Spielers (im Moment nur ein Kreis) werden durch Kraft-Angaben durchgeführt: Bei Tastendruck wird eine Sub der Klasse des Spielers ausgeführt, bei der dann ein Double-Wert angegeben wird, wie weit sich der Spieler nun bewegt.
Und die Kollisionsüberprüfung wird im Moment noch recht simpel gehandhabt, funktioniert aber auch irgendwie nicht... Wenn eine Kollision zustande kommt, wird die Richtung, in der sich der Spieler bewegt, umgekehrt - Irgendwie war's das auch schon und egal wie heftig ich in die Tasten hau, der Spieler bewegt sich 0.
Verwendete Programmiersprache und IDE
Visual Basic (Visual Studio 2010 Ultimate)
.Net Framework 2.0
Fehlermeldung:
Keine...
Bisheriger Code:
VB.NET-Quellcode
- '
- ' Dieser Sub ist in Form1 und wird durch einen Timer bearbeitet (Interval = 40 für flüssige 25 FPS)
- '
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- Dim MoveNS As Double = 0
- Dim MoveWE As Double = 0
- If GetAsyncKeyState(Keys.Left) Then
- MoveWE -= 0.2
- End If
- If GetAsyncKeyState(Keys.Right) Then
- MoveWE += 0.2
- End If
- If GetAsyncKeyState(Keys.Up) Then
- MoveNS -= 0.2
- End If
- If GetAsyncKeyState(Keys.Down) Then
- MoveNS += 0.2
- End If
- If GetAsyncKeyState(Keys.Space) Then
- Sly.Break(0.3)
- End If
- Sly.Move(MoveNS, MoveWE)
- Me.Invalidate()
- End Sub
- '
- ' Und dieser Sub ist innerhalb der SlyBot-Klasse ("Sly" ist ein Objekt des Typs "SlyBot" - Die Spieler-Klasse)
- '
- Public Sub Move(ByVal p_ForceNS As Double, ByVal p_ForceWE As Double)
- m_ForceNS = Math.Round(m_ForceNS + p_ForceNS * (1 + Math.Abs(m_ForceNS)), 3)
- m_ForceWE = Math.Round(m_ForceWE + p_ForceWE * (1 + Math.Abs(m_ForceWE)), 3)
- m_Location = New Point(m_Location.X + m_ForceWE, m_Location.Y + m_ForceNS)
- If p_ForceNS = 0 Or p_ForceWE = 0 Then Break(0.9)
- If CDown() = True Or CUp() = True Then m_ForceNS *= -m_Bounce
- If CLeft() = True Or CRight() = True Then m_ForceWE *= -m_Bounce
- m_Tail.Add(New Point(m_Location.X + m_Size.Width / 2, m_Location.Y + m_Size.Height / 2))
- m_Speed.Add(Math.Abs(ForceWE) + Math.Abs(ForceNS))
- If m_Speed.Count >= 500 Then m_Speed.RemoveAt(0)
- End Sub
- '
- ' Diese Funktionen der Klasse SlyBot geben zurück, ob eine Kollision stattgefunden hat (Fenstergröße ist 800x600)
- '
- Private Function CRight() As Boolean
- Return m_Location.X + m_Size.Width >= 800
- End Function
- Private Function CLeft() As Boolean
- Return m_Location.X <= 0
- End Function
- Private Function CUp() As Boolean
- Return m_Location.Y <= 0
- End Function
- Private Function CDown() As Boolean
- Return m_Location.Y + m_Size.Height >= 640
- End Function
- '
- ' Dieser Sub der SlyBot-Klasse wird verwendet, um den Spieler bei fehlendem Tastendruck langsam und bei Tastendruck stark abzubremsen
- '
- Public Sub Break(ByVal p_Strength As Double)
- If Not m_ForceNS = 0 Then
- m_ForceNS *= p_Strength
- End If
- If Not m_ForceWE = 0 Then
- m_ForceWE *= p_Strength
- End If
- End Sub
Sonstige nützliche Informationen:
- Die Variablen "m_ForceNS" und "m_ForceWE" geben die aktuelle Geschwindigkeit nach oben/unten (North/South) und links/rechts (West/East) an.
- Die Variablen "m_Tail" und "m_Speed" sind für Bewegung und Kollision ohne Bedeutung. "m_Tail" speichert die Positionen des Spielers ab und ermöglicht die Anzeige eines "Schweifes" des Spielers auf dem Bildschirm. "m_Speed" ist eine Auflistung der Gesamtgeschwindigkeit und dient der Anzeige der Geschwindigkeit in einem Graph in einer anderen Form.
Wäre wirklich super, wenn mir jemand helfen könnte, ich habe langsam keine Ahnung mehr, wie ich das umsetzen soll :wacko:
MfG,
X-Zat / Momo