Spiel Hintergrund Scrollen???

  • VB.NET

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    Spiel Hintergrund Scrollen???

    Hallo leute,

    hab wieder am Minigame gearbeitet und hab ein Problem. Das Spiel soll so ähnlih aufgebaut sein, wie Pokemon, also von der Grafik her.

    Wie mache ich es, dass das Hintergrundbild scrollt und der Spieler immer in der Mitte Bleibt, OHNE dass ich eine riesige PictureBox mit einem Riesigen Hintergrundbild Benutze. (Ich kann natürlich mehrere Bilder nehmen, aber wie)

    mfg LsFan :)
    Ne Picturebox ist dazu da um nen Bild darzustellen. Fertig. Nix verschieben, Animieren,... und erst recht keine Spiele.
    Entweder du nimmst GDI+ oder was anständiges wie XNA, SharpDX,... dort kannste einfach mit ner Matrix die Welt verschieben.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    LsFan schrieb:

    TUTORIAL???
    Suchfunktion: GDI.
    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!
    Hier ist ein kleines Beispiel:

    Das kommt alles ins Paint Event:

    VB.NET-Quellcode

    1. Dim g As Graphics = e.graphics
    2. g.Drawimage(Bild, New Rectangle(New Point(0,0), New Size(Bildbreite, Bildhöhe)))


    Dann in einen Timer:

    VB.NET-Quellcode

    1. Me.Invalidate()

    TheMaxiSoftware schrieb:

    Dann in einen Timer:
    Nö.
    Dann und nur dann, wenn sich der Bildinhalt geändert hat.
    Nur wenn das im Timer passiert, dann natürlich auch im Timer.
    Primär ist die Änderung des Bildinhalts, nicht der Timer.
    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!

    TheMaxiSoftware schrieb:

    die Taste zum rechts laufen gedrückt worden ist
    wäre KeyPress die richtige Adresse, dort wird das Keyboard-AutoRepeat behandelt.
    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!
    nochmal genau: xD

    wie bekomme ich es hin, wenn der spieler z.B nach unten läuft, dass sich dann das Hintergrundbild nachoben scrollt. Und wie generiere ich eine ganze Map. Die ist nähmlich ziemlich groß? :D

    mfg LsFan :)

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

    Die Map könntes du in Paint machen oder in einem anderen Malprogramm.

    Jetzt ein Beispiel wenn der spieler nach unten läuft:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Hintergrund As New Bitmap(My.Resources.Hintergrund)
    3. Dim Spieler As New Bitmap(My.Resources.Spieler)
    4. Dim Spielerhöhe As Integer = 50
    5. Dim Spielerbreite As Integer = 50
    6. Dim Spieler_x As Integer = 200
    7. Dim Spieler_y As Integer = 200
    8. Dim Geschwindigkeit As Integer = 10
    9. Dim Hintergrund_x As Integer = 0
    10. Dim Hintergrund_y As Integer = 0
    11. Dim Hintergrundbreite As Integer = 1000
    12. Dim Hintergrundhöhe As Integer = 1000
    13. Dim Runtergehen As Boolean = False
    14. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    15. If Runtergehen = True Then
    16. Hintergrund_y -= Geschwindigkeit
    17. Me.Invalidate()
    18. End If
    19. End Sub
    20. Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    21. If e.KeyValue = Windows.Forms.Keys.Down Then
    22. Runtergehen = True
    23. End If
    24. End Sub
    25. Private Sub Form1_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
    26. If e.KeyValue = Windows.Forms.Keys.Down Then
    27. Runtergehen = False
    28. End If
    29. End Sub
    30. Private Sub Form1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    31. Dim g As Graphics = e.Graphics
    32. g.DrawImage(Hintergrund, New Rectangle(New Point(Hintergrund_x, Hintergrund_y), New Size(Hintergrundbreite, Hintergrundhöhe)))
    33. g.DrawImage(Spieler, New Rectangle(New Point(Spieler_x, Spieler_y), New Size(Spielerbreite, Spielerhöhe)))
    34. End Sub
    35. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    36. Me.DoubleBuffered = True
    37. End Sub
    38. End Class


    Das mit dem KeyDown und KeyUp Event wird hier nochmal erklärt:

    youtube.com/watch?v=TsOnWiNWhv8

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

    woooooow das war verdammt hilfreich, danke danke danke :thumbsup: :thumbsup: :thumbsup:

    aber wie bekomme ich das jetzt hin, dass wenn mein Hintergrundbild.Top auf 0 ist, dass dann ein anderes hintergrundbild sofort angehängt wird, oder geht das nicht?

    naja trotzdem unendlich dank

    msfg LsFan :D
    ich hab jetzt ein wenig weitergemacht un hab noch ein problem:

    ich habe zwei bilder vom spieler "rechten_fuss_heben.png" und "linken_fuss_heben.png". Wie mache ich eine Laufanimation, bei der, wenn ich eine taste drücke, dass diese Animation dann abgespielt wird. Und wenn ich die taste wieder loslasse, soll der spieler wieder "stehen.png" als bild haben (BASIERT AUF CODEBEISPIEL VON >> TheMaxiSoftware <<)

    mfg LsFan :)
    Als erstes brauchst du:

    VB.NET-Quellcode

    1. Dim Figurbild As Integer
    2. Dim Figur As Integer = 1


    Und dann im Timer:

    VB.NET-Quellcode

    1. If Runtergehen = true Then
    2. If Figur = 1 Then
    3. Figurbild = 1
    4. Else
    5. Figurbild = 2
    6. End If
    7. Else
    8. Figurbild = 0
    9. End If



    Im Paint Event:

    VB.NET-Quellcode

    1. If Figurbild = 0 Then
    2. g.DrawImage(FigurStehen,...)
    3. End If
    4. If Figurbild = 1 Then
    5. g.DrawImage(FigurRechterFuß,...)
    6. End If
    7. If Figurbild = 2 Then
    8. g.DrawImage(FigurLinkerFuß,...)
    9. End If



    Code wurde nicht ausprobiert!
    Dich mit XNA anfreunden, weil diese Methoden würden nie sinnvolllaufen...
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!