Picturebox springen lassen

  • VB.NET

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

    Picturebox springen lassen

    Hey Leute,

    Was Pictureboxen bewegen angeht, bin ich noch Anfänger.

    Also, ich versuche schon die ganze zeit eine Picturebox mittels eines timers

    springen zu lassen und diese auch wieder landen zu lassen,
    Aber ich weiß partu nicht, wie ich das anstellen soll...

    mit einem keydown event starte ich den timer und in den timer1 hab ich

    geschrieben:

    VB.NET-Quellcode

    1. picturebox.location.y + = 10
    GEHT NICHT!

    VB.NET-Quellcode

    1. picturebox.location.y = picturebox.location.y + 10
    GEHT AUCH NICHT

    denn picturebox.location.y wird immer unterstrichelt!

    was mache ich falsch???
    oder gibt es auch eine andere lösung um diese pic.box jumpen zu lassen???

    Danke im Voraus MfG gtw2o11

    gtw2o11 schrieb:

    denn picturebox.location.y wird immer unterstrichelt!
    was mache ich falsch???

    Wenn Du Dir das "gestrichelte" mal anschaust, so siehst Du den Hinweis dass Location ein ReadOnly-Wert ist. Also musst Du entweder mit .Top / .Left arbeiten oder Du machst es so:

    VB.NET-Quellcode

    1. PictureBox1.Location = New System.Drawing.Point(PictureBox1.Location.X, PictureBox1.Location.Y - 10)


    Beachte: x-Werte gehen von links nach rechts, y-Werte von oben nach unten. Bessere Performance erreichst Du mit GDI, allerdings reicht es so zum Lernen auch ;)

    Kangaroo schrieb:

    gtw2o11 schrieb:




    Beachte: x-Werte gehen von links nach rechts, y-Werte von oben nach unten. Bessere Performance erreichst Du mit GDI, allerdings reicht es so zum Lernen auch ;)



    Ok, danke schonmal für deine Antwort.

    hab mich schon hier im Forum umgeguckt und habe auch einen hilfreichen beitrag gefunden

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Const besch As Integer = 2 ' Beschleunigung
    3. Private Const stoss As Integer = 3 ' Stossabsorption am Boden
    4. Private gesch As Integer ' aktuelle Fall/Steiggeschwindigkeit
    5. Private WithEvents tm As New Windows.Forms.Timer
    6. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    7. If e.KeyCode = Keys.Up Then
    8. If Not tm.Enabled Then
    9. tm.Enabled = True
    10. gesch = -20
    11. End If
    12. End If
    13. End Sub
    14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    15. tm.Interval = 30
    16. tm.Enabled = False
    17. chara.Top = Me.ClientRectangle.Height - chara.Height
    18. End Sub
    19. Private Sub tm_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tm.Tick
    20. Dim ziel As Integer = chara.Top
    21. gesch += besch
    22. ziel += gesch
    23. If ziel + chara.Height > Me.ClientRectangle.Height Then
    24. ziel = Me.ClientRectangle.Height - chara.Height
    25. If Math.Abs(gesch) - stoss < 0 Then
    26. gesch = 0
    27. Else
    28. gesch = 0 - (gesch - stoss)
    29. End If
    30. End If
    31. chara.Top = ziel
    32. If gesch = 0 AndAlso chara.Top = (Me.ClientRectangle.Height - chara.Height) Then
    33. tm.Enabled = False
    34. Debug.Print("done")
    35. End If
    36. End Sub
    37. End Class
    char = picturebox.

    so aber die picturebox titscht nach den springen immer wieder auf dem boden auf und geht wieder in die luft xD wie ein flummi...

    wie muss ich den code umschreiben, dass der nur einmal springt???

    Danke im Voraus MfG gtw2o11