Visual Basic Game Porblem: Nach öffnen und schliessen einer weiteren Form ist die Bewegung des Charakters nicht mehr möglich.

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von XpressMak.

    Visual Basic Game Porblem: Nach öffnen und schliessen einer weiteren Form ist die Bewegung des Charakters nicht mehr möglich.

    Also, zunächst mal Guten morgen zusammen. Ich habe mich gerade erst hier angemeldet, falls dieser Post nicht im richtigen Thema gepostet wurde, bitte ändern.
    Ich absolviere eine Vorlehre als Informatiker in der Schweiz, und mache ab dem Sommer die Lehrstelle. Im Modul, dass ich gerade durchgehe, muss ich Visual Basic lernen. Im Rahmen des Themas "Klassen und Objekte" bin ich ein kleineres Spiel am schreiben. Nun habe ich es gerade erst geschafft, Häuser undurchdringbar zu machen. Nun möchte ich, dass bei Kollision zwischen Charakter und Gebäude, eine neue Form aufgeht. Da die Kollisionsüberprüfung aber in einem Timer läuft, lasse ich zunächst bei Kollision einen Button erscheinen, der danach fragt, ob man das Gebäude denn jetzt betreten wolle. Anonsten würde sich die zu öffnende Form unbegrenzt oft öffnen. Nach dem klick darauf, öffnet sich eine neue Form, in der man zwischen verschiedensten Esswaren auswählen kann. Nun habe ich aber folgendes Problem: Nach schliessen dieser Form, kann ich meinen Charakter nicht mehr bewegen, und habe KEINE Ahnung, warum.

    Hier der gesamte Code:

    VB.NET-Quellcode

    1. Public Class NewGame
    2. Dim kollision As Boolean
    3. Dim vonlinks As Boolean
    4. Dim vonrechts As Boolean
    5. Dim vonoben As Boolean
    6. Dim vonunten As Boolean
    7. Dim charaspeed As Integer = 10
    8. Dim untengedrückt As Boolean
    9. Dim obengedrückt As Boolean
    10. Dim rechtsgedrückt As Boolean
    11. Dim linksgedrückt As Boolean
    12. 'Bewegung
    13. Private Sub NewGame_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    14. 'Koordiniert die Bewegungsmöglichkeiten
    15. If e.KeyCode = Keys.W And vonunten = False Then
    16. chara.Top -= charaspeed
    17. obengedrückt = True
    18. untengedrückt = False
    19. linksgedrückt = False
    20. rechtsgedrückt = False
    21. chara.Image = CType(My.Resources.ResourceManager.GetObject("charhinten"), Drawing.Image)
    22. ElseIf e.KeyCode = Keys.S And vonoben = False Then
    23. chara.Top += charaspeed
    24. obengedrückt = False
    25. untengedrückt = True
    26. linksgedrückt = False
    27. rechtsgedrückt = False
    28. chara.Image = CType(My.Resources.ResourceManager.GetObject("char1"), Drawing.Image)
    29. ElseIf e.KeyCode = Keys.A And vonrechts = False Then
    30. chara.Left -= charaspeed
    31. obengedrückt = False
    32. untengedrückt = False
    33. linksgedrückt = True
    34. rechtsgedrückt = False
    35. chara.Image = CType(My.Resources.ResourceManager.GetObject("charlinks"), Drawing.Image)
    36. ElseIf e.KeyCode = Keys.D And vonlinks = False Then
    37. chara.Left += charaspeed
    38. obengedrückt = False
    39. untengedrückt = False
    40. linksgedrückt = False
    41. rechtsgedrückt = True
    42. chara.Image = CType(My.Resources.ResourceManager.GetObject("charrechts"), Drawing.Image)
    43. End If
    44. Label1.Text = vonoben
    45. Label2.Text = vonunten
    46. Label3.Text = vonlinks
    47. Label4.Text = vonrechts
    48. End Sub
    49. 'Kollisionssteuerung
    50. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckCol.Tick
    51. If chara.Bounds.IntersectsWith(house2.Bounds) Then
    52. enterburgershopbtn.Visible = True
    53. End If
    54. kollision = False
    55. 'vonoben = False
    56. 'vonunten = False
    57. 'vonlinks = False
    58. 'vonrechts = False
    59. 'Kollision
    60. If chara.Top + chara.Height >= house1.Top And chara.Top <= house1.Top + house1.Height And _
    61. chara.Left + chara.Width >= house1.Left And chara.Left <= house1.Left + house1.Width Or _
    62. chara.Top + chara.Height >= house2.Top And chara.Top <= house2.Top + house2.Height And _
    63. chara.Left + chara.Width >= house2.Left And chara.Left <= house2.Left + house2.Width Or _
    64. chara.Top + chara.Height >= robot.Top And chara.Top <= robot.Top + robot.Height And _
    65. chara.Left + chara.Width >= robot.Left And chara.Left <= robot.Left + robot.Width Then
    66. If untengedrückt = True Then
    67. vonoben = True
    68. vonunten = False
    69. vonlinks = False
    70. vonrechts = False
    71. ElseIf obengedrückt = True Then
    72. vonunten = True
    73. vonoben = False
    74. vonlinks = False
    75. vonrechts = False
    76. ElseIf linksgedrückt = True Then
    77. vonrechts = True
    78. vonlinks = False
    79. vonoben = False
    80. vonunten = False
    81. ElseIf rechtsgedrückt = True Then
    82. vonlinks = True
    83. vonrechts = False
    84. vonoben = False
    85. vonunten = False
    86. End If
    87. Else
    88. vonoben = False
    89. vonunten = False
    90. vonlinks = False
    91. vonrechts = False
    92. End If
    93. End Sub
    94. Private Sub NewGame_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    95. CheckCol.Enabled = True
    96. enterburgershopbtn.Visible = False
    97. End Sub
    98. Private Sub enterburgershopbtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles enterburgershopbtn.Click
    99. burgerladen.Show()
    100. End Sub
    101. Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles robot.Click
    102. End Sub
    103. End Class



    Und ja ich weiss, ich habe das Kollisionsproblem etwas primitiv gelöst. X/
    Hey, ein Spiel wirst du auf diese Weise nicht anständig hinbekommen. Gib mal bei google .net Gameloop ein, arbeite mit der Gameloop und zeichne selbst mit GDI oder arbeite mit DirectX oder einer andere Engine.

    Deine Form wird keinen Focus mehr haben, deshalb kommen die KeyDowns nicht an.

    VB.NET-Quellcode

    1. Using b As New burgerladen
    2. b.ShowDialog()
    3. End Using


    Schau dir auch mal das an:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen

    Murdock schrieb:

    Hey, ein Spiel wirst du auf diese Weise nicht anständig hinbekommen. Gib mal bei google .net Gameloop ein, arbeite mit der Gameloop und zeichne selbst mit GDI oder arbeite mit DirectX oder einer andere Engine.

    Deine Form wird keinen Focus mehr haben, deshalb kommen die KeyDowns nicht an.

    VB.NET-Quellcode

    1. Using b As New burgerladen
    2. b.ShowDialog()
    3. End Using


    Schau dir auch mal das an:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen




    Haben es in der Firma rausgefunden. Musste die Keypreview der Gameform aktivieren.
    Ja komplexeres möchte ich noch gerade nicht angehen, da ich noch anfänger bin.
    Aber danke trotzdem!