Shape auf anderes aufspringen lassen

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Neptun.

    Shape auf anderes aufspringen lassen

    Hei Leute ,
    ICh bin zur Zeit dran mir das Spiel Super mario nach zu machen komme aber am anfang schon nicht weiter.
    Ich hab den Mario in einer Pic.box drin diese lässt sich auch frei nach meinem Willen bewegen .
    Nun zum problem ich weis nich wie ich den code für das springen von mario auf eine Shape-box schreiben soll.

    Vielen dank schon mal im Vorraus
    Hallo baggi,
    für die Steuerung des Sprungs verwendest du am besten
    ein Timer-Control (Anfangsgeschwindigkeit festlegen
    und bei jedem Timer-Aufruf die Top der Picturebox
    verkleinern). Um festzustellen, ob die Figur auf einem
    Shape gelandet ist, muss man die Koordinaten der Picturebox
    mit den Koordinaten der Shapes vergleichen und gegebenenfalls
    stoppen. Ich habe auch noch ein Beispiel auf meiner
    Festplatte. Wenn Interesse besteht, werde ich es mal raussuchen.
    Gruss,

    Neptun
    Hallo baggi,
    hier der Code. Gesteuert wird über die Pfeiltasten:

    Visual Basic-Quellcode

    1. ' Copyright © 2010 by Neptun
    2. ' Controls: 1 * Shape mit Index = 0
    3. ' 1 * Timer, 1 * PictureBox
    4. Option Explicit
    5. Private Type RECT
    6. Left As Long
    7. Top As Long
    8. Right As Long
    9. Bottom As Long
    10. End Type
    11. Private Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
    12. Private Declare Function IntersectRect Lib "user32" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
    13. Private Speed As Single, XRi As Single
    14. Private Sub Form_Load()
    15. Dim i As Long, Hoehe As Single
    16. Me.ScaleMode = vbPixels
    17. Me.BackColor = RGB(200, 200, 255)
    18. Me.KeyPreview = True
    19. Speed = 0
    20. XRi = 0
    21. With Picture1
    22. .BorderStyle = vbBSNone
    23. .BackColor = vbRed
    24. .Move 390, 10, 40, 70
    25. End With
    26. For i = 0 To 8
    27. Hoehe = 20 + i * 40
    28. If i > 0 Then Load Shape1(i)
    29. With Shape1(i)
    30. .Shape = vbShapeRectangle
    31. .FillStyle = vbFSSolid
    32. .FillColor = RGB(128, 70, 0)
    33. .Move 50 + 70 * i, Me.ScaleHeight - Hoehe, 20, Hoehe
    34. .Visible = True
    35. End With
    36. Next i
    37. Timer1.Interval = 15
    38. Timer1.Enabled = True
    39. End Sub
    40. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    41. Select Case KeyCode
    42. Case vbKeyRight ' nach rechts laufen
    43. XRi = 4
    44. Case vbKeyLeft ' nach links laufen
    45. XRi = -4
    46. Case vbKeyUp ' hochspringen, wenn auf dem Boden
    47. If Speed = 0 Then Speed = -5
    48. End Select
    49. End Sub
    50. Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    51. If KeyCode = vbKeyRight Or KeyCode = vbKeyLeft Then XRi = 0
    52. End Sub
    53. Private Sub Timer1_Timer()
    54. Dim flgGround As Boolean, i As Long, j As Long
    55. Dim R1 As RECT, R2 As RECT, Ground As Single
    56. ' Rechts / Links laufen
    57. If XRi <> 0 Then Picture1.Left = Picture1.Left + XRi
    58. ' Sprung Steigphase
    59. If Speed < 0 Then
    60. Picture1.Top = Picture1.Top + Speed
    61. Speed = Speed + 0.2
    62. If Speed > 0 Then Speed = 0
    63. Exit Sub
    64. End If
    65. ' Freier Fall
    66. Ground = Picture1.Top + Picture1.Height
    67. For i = 1 To Speed + 1
    68. If Ground >= Me.ScaleHeight Then
    69. ' Boden erreicht
    70. Speed = 0
    71. Exit Sub
    72. End If
    73. flgGround = False
    74. ' Alle Shapes durchgehen
    75. For j = 0 To Shape1.UBound
    76. ' Figur auf Höhe von Shape?
    77. If Ground = Shape1(j).Top Then
    78. With Shape1(j) ' Koordinaten Shape eintragen
    79. Call SetRect(R1, .Left, .Top, .Left + .Width, .Top + .Height)
    80. End With
    81. With Picture1 ' Koordinaten Figur eintragen
    82. Call SetRect(R2, .Left, Ground, .Left + .Width, Ground + 1)
    83. End With
    84. ' Berührt die Figur ein Shape?
    85. If IntersectRect(R1, R1, R2) <> 0 Then
    86. ' Boden erreicht
    87. flgGround = True
    88. Speed = 0
    89. Exit For
    90. End If
    91. End If
    92. Next j
    93. ' Kein Boden? 1 Pixel fallen lassen
    94. If flgGround = False Then Ground = Ground + 1
    95. Next i
    96. ' Kein Boden? Fallgeschwindigkeit erhöhen
    97. If flgGround = False Then Speed = Speed + 0.3
    98. Picture1.Top = Ground - Picture1.Height
    99. End Sub

    Grundsätzlich ist sind Shapes nicht die beste Lösung.
    Besser ist es, das Spielfeld in kleine Quadrate einzuteilen
    und für jedes Quadrat in einem 2D-Array zu hinterlegen, ob
    es begehbar ist, oder nicht.
    Gruss,

    Neptun

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Neptun“ ()