Brauche Hilfe bei meinem erstelltem Spiel

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von starscream14.

    Brauche Hilfe bei meinem erstelltem Spiel

    Guten Tag allerseits,
    Ich habe ein Problem, nähmlich möchte ich ein Jump an Run spiel erstellen mit Visual Basic 2010.
    Dafür habe ich in eine Picturebox eine Person gemacht und in einen Panel einen Stein.
    Der Sinn des Spiels ist, dass man immer über den Stein springen muss.
    Funktioniert auch alles, bis auf dass, wenn der Stein die Person berührt nichts passiert.
    Deshalb würde ich gerne, wenn der Stein die Person berührt 20% von der Progressbar abziehen lassen, und wenn die Progressbar 0% ist eine MsgBox mit dem Inhalt "Game Over" erscheinen lassen. Allerdings klappt das nicht so ganz bei mir :).
    Währe echt nett, wenn ihr mir Helfen könntet.
    Der Code:

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    2. stone.Left -= 10
    3. stone.Enabled = False
    4. If stone.Left <= 0 Then
    5. stone.Location = New Point(549, 206)
    6. If stone.Location = human.Location Then
    7. ProgressBar1.Value -= 20
    8. If ProgressBar1.Value = 0 Then
    9. MsgBox("Game Over")
    10. Me.Close()
    11. End If
    12. End If
    13. End If
    14. End Sub
    Du hast 2 Rechtecke, und so kannst Du feststellen, ob sie sich überlagern:

    VB.NET-Quellcode

    1. If (rc.IntersectsWith(rc2)) Then
    2. ' hier Deinen Progress-Wert anpassen
    3. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Dim rc As New Rectangle(...)
    2. Dim rc2 As New Rectangle(...)
    3. If (rc.IntersectsWith(rc2)) Then
    4. ' ...
    5. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Jetzt kommen die 2 Fehler:
    Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "New" diese Anzahl von Argumenten akzeptiert. C:\Users\Daniel\Documents\Visual Studio 2010\Projects\WindowsApplication1\WindowsApplication1\Jumper.vb 29 17 WindowsApplication1
    Fehler 2 Fehler bei der Überladungsauflösung, da keine zugreifbare "New" diese Anzahl von Argumenten akzeptiert. C:\Users\Daniel\Documents\Visual Studio 2010\Projects\WindowsApplication1\WindowsApplication1\Jumper.vb 30 17 WindowsApplication1
    Und warum hast Du die Quelltextzeilen, in denen dieser Fehler auftritt, nicht mitgepostet?

    VB.NET-Quellcode

    1. Dim rc As New Rectangle(Point, Size)
    2. Dim rc As New Rectangle(x, y ,width, height)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    warte ich poste mal den ganzen code ich habe nähmlich 2 picture boxen (noch geändert eben) in den sind jeweils die bilder einmal stone der stein und human die figur

    VB.NET-Quellcode

    1. Public Class Jumper
    2. Private Sub Jumper_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    3. If Keys.Space Then
    4. human.Location = New Point(10, 10)
    5. Timer1.Start()
    6. End If
    7. End Sub
    8. Private Sub Jumper_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    9. MsgBox("Versuche über den Stein hinweg zu springen! " & vbCrLf & " Drücke die Leer-Taste um zu springen.")
    10. Timer2.Start()
    11. End Sub
    12. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    13. human.Location = New Point(10, 100)
    14. Timer1.Stop()
    15. End Sub
    16. Private Sub Panel1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs)
    17. Stone.Enabled = False
    18. Timer2.Enabled = True
    19. End Sub
    20. Private Sub Timer2_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    21. stone.Left -= 10
    22. stone.Enabled = False
    23. If stone.Left <= 0 Then
    24. Stone.Location = New Point(549, 206)
    25. Dim rc As New Rectangle(Stone)
    26. Dim rc2 As New Rectangle(human)
    27. If (rc.IntersectsWith(rc2)) Then
    28. ProgressBar1.Value -= 10
    29. If ProgressBar1.Value = 0 Then
    30. MsgBox("Game Over")
    31. Me.Close()
    32. End If
    33. End If
    34. End If
    35. End Sub
    36. Private Sub ProgressBar1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ProgressBar1.Click
    37. End Sub
    38. End Class

    VB.NET-Quellcode

    1. Dim rc As New Rectangle(Stone.Location, Stone.Size)
    2. Dim rc2 As New Rectangle(human.Location, human.Size)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also der Code ist jetzt

    VB.NET-Quellcode

    1. Dim rc As New Rectangle(Stone.Location, Stone.Size)
    2. Dim rc2 As New Rectangle(human.Location, human.Size)
    3. If (rc.IntersectsWith(rc2)) Then
    4. ProgressBar1.Value -= 10
    5. If ProgressBar1.Value = 0 Then
    6. MsgBox("Game Over")
    7. Me.Close()
    8. End If
    9. End If

    aber leider klappts immernoch nicht :(
    Was funktioniert nicht?
    Wie soll es funktionieren?
    Was passiert (nicht)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Setz doch mal einen Haltepunkt in die Timer-Prozedur und sieh nach, ob alles so läuft, wie Du willst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Stichwort: Bounds.IntersectsWith

    VB.NET-Quellcode

    1. If picturebox1.Bounds.IntersectsWith(picturebox2.Bounds) Then
    2. 'verloren
    3. End if


    Treffen sich beide Pictureboxen, wird ein Befehl ausgeführt.
    Sollte funktionieren.

    Endweder Timer, oder PictureBox1_LocationChanged


    Gruß, Dennis