Map wie in diesem Video vergrößern?

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Artentus.

    Map wie in diesem Video vergrößern?

    Hey,
    ich habe mir ein Video angeschaut zu einem 2d Spiel diesem hier: youtube.com/watch?v=jp4lvMorhMo

    Meine Frage ist nun wie kann ich bei mir die Map auch etwa so groß machen z.B ich setze fest das die Map 500x500 Blöcke groß ist und ein einzelner Block ist 32 Pixel groß

    Dann noch das eben in der Mitte der Spieler ist aber das bekomme ich selber hin.
    Danke an die Leute die mir dabei Helfen und bitte keine unnötigen kommentare oder irgentetwas was nicht Hilfreich ist!
    Ich suche nur Hilfe keine Kommentare die die Zeit von allen vergolden!

    Gruß SBot
    Hi
    einfach eine Tilemap (das war in dem komplizierten Text von mir letztens drin). Artentus hat auch ein Tutorial im Sourcecode-Austausch dazu veröffentlicht btw.
    Im Prinzip hast du einfach deine Tiles, das ist ein Array oder eine Liste von Bildern, die du über einen Index ansteuern kannst. Anschließend setzt du deine darstellende Karte aus diesen Tiles dar, indem du pro Block das zugehörige Tile über den Index abfrägst. D.h. du speicherst pro Block nur den Index, der auf das Tile verweist und zeichnest das anschließend, sofern der Block sichtbar ist.

    Gruß
    ~blaze~
    Die Map lädt sich halt nicht von alleine. Du musst die Daten aus der Datei irgendwie so auswerten, dass dein Programm damit was anfangen kann. In meinem Tutorial habe ich grundlegend beschrieben, wie sowas aussehen könnte und wie man da generell rangeht. Es ist jetzt deine Aufgabe das so anzupassen, dass es für deinen Anforderungen genügt.
    Ich bin jetzt soweit:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim KeyPushed As Short = 0
    3. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Integer) As Short
    4. Public Function GetKeyState(ByVal key1 As Integer) As Boolean
    5. Dim s As Short
    6. s = GetAsyncKeyState(key1)
    7. If s = 0 Then Return False
    8. Return True
    9. End Function
    10. Dim XTiles As Integer = 19
    11. Dim YTiles As Integer = 14
    12. Dim ResWidth As Integer = 750
    13. Dim ResHeight As Integer = 550
    14. Dim TileSize As Integer = 32
    15. Dim G As Graphics
    16. Dim BBG As Graphics
    17. Dim BB As Bitmap
    18. Dim bmpTile As Bitmap
    19. Dim sRect As Rectangle
    20. Dim dRect As Rectangle
    21. Dim MapHeight As Integer = 100
    22. Dim MapWidth As Integer = 100
    23. Dim Map(MapHeight, MapWidth, 10) As Integer
    24. Dim MapX As Integer = 20
    25. Dim MapY As Integer = 20
    26. Dim IsRunning As Boolean = True
    27. Dim mouseX As Integer
    28. Dim mouseY As Integer
    29. Dim mMapX As Integer
    30. Dim mMapY As Integer
    31. Dim bmpToon As Bitmap
    32. Dim xPos As Integer = 0
    33. Dim yPos As Integer = 0
    34. Dim MoveSpeed As Integer = 32
    35. Dim MoveDir As Short = 0
    36. Dim LastDir As Short = 2
    37. Dim PaintBrush As Integer = 0
    38. Dim OpenDialog As Boolean = False
    39. Private Sub LoadMap(ByVal MapFile As String)
    40. Try
    41. Dim sr As New IO.StreamReader(MapFile & ".map")
    42. Dim intValue As String = ""
    43. Dim strLine As String = ""
    44. Dim X As Integer = 0
    45. Dim Y As Integer = 0
    46. Do Until sr.EndOfStream
    47. strLine = sr.ReadLine
    48. strLine = strLine.Replace(strLine.LastIndexOf(","), "")
    49. For Each item As String In Split(strLine, ",", -1)
    50. If item = "" Then
    51. item = 0
    52. End If
    53. If X <= MapWidth Then
    54. Map(X, Y, 0) = Int(item)
    55. End If
    56. X = X + 1
    57. Next
    58. X = 0
    59. Y = Y + 1
    60. Loop
    61. sr.Close()
    62. sr.Dispose()
    63. Catch ex As Exception
    64. IsRunning = False
    65. End Try
    66. End Sub
    67. Private Sub SaveMap(ByVal MapFile As String)
    68. Try
    69. Dim sw As New IO.StreamWriter(MapFile & ".map")
    70. Dim intValue As String = ""
    71. Dim strLine As String = ""
    72. Dim X As Integer = 0
    73. Dim Y As Integer = 0
    74. For Y = 0 To MapHeight
    75. For X = 0 To MapWidth
    76. strLine = strLine & Map(X, Y, 0) & ","
    77. Next
    78. sw.WriteLine(strLine)
    79. strLine = ""
    80. Next
    81. sw.Close()
    82. sw.Dispose()
    83. Catch ex As Exception
    84. IsRunning = False
    85. End Try
    86. End Sub
    87. Private Sub SpeichernToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SpeichernToolStripMenuItem.Click
    88. SaveMap("Auros")
    89. End Sub
    90. Private Sub LadenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LadenToolStripMenuItem.Click
    91. LoadMap("Auros")
    92. End Sub
    93. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    94. LoadMap("Auros")
    95. End Sub
    96. Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
    97. mouseX = Math.Floor(e.X / TileSize)
    98. mouseY = Math.Floor(e.Y / TileSize)
    99. mMapX = MapX + mouseX
    100. mMapY = MapY + mouseY
    101. End Sub
    102. Private Sub MoveToon(ByVal dir As Short)
    103. Select Case dir
    104. Case 1
    105. If MapY > 0 Then
    106. yPos += MoveSpeed
    107. If yPos >= TileSize Then
    108. yPos = 0
    109. MapY -= 1
    110. End If
    111. End If
    112. Case 2
    113. If MapY < MapHeight - YTiles Then
    114. yPos -= MoveSpeed
    115. If yPos <= TileSize * -1 Then
    116. yPos = 0
    117. MapY += 1
    118. End If
    119. End If
    120. Case 3
    121. If MapX > 0 Then
    122. xPos += MoveSpeed
    123. If xPos >= TileSize Then
    124. xPos = 0
    125. MapX -= 1
    126. End If
    127. End If
    128. Case 4
    129. If MapX < MapWidth - XTiles Then
    130. xPos -= MoveSpeed
    131. If xPos <= TileSize * -1 Then
    132. xPos = 0
    133. MapX += 1
    134. End If
    135. End If
    136. End Select
    137. End Sub
    138. End Class


    Ich habe Hilfe von einem Source aus dem I Net genommen weil das das erste mal für mich ist!
    Aber ich habe alles Selbst abgeändert bzw in die Richtige Stelle eingefügt bis ich kapiert habe was der ganze Source Code macht sind 3 Tage vergangen^^
    Bei allem Respekt, aber so programmiert man kein Spiel. Du benutzt die Form als zentralen Punkt und von Objektorientierung ist keine Spur.
    Als Orientierunghilfe kannst du z.B. [C#] [OpenSource] [Projektvorstellung] Langzeitprojekt - GameUtils nehmen, ist zwar noch nicht ganz fertig, aber die grundlegende Struktur sollte gut erkennbar sein.