Timer Alternative?

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von VBGameCoder.

    Timer Alternative?

    Hallo zusammen,

    ich bin Programmiereinsteiger und versuche es zur Zeit mit Visual Basic.
    Derzeit bastel ich zur Übung n kleines Moorhuhn ähnliches Spiel.

    Nun bin ich an einer Stelle angelangt an der sich meine Vögel bewegen sollen...das klappt auch wunderbar.
    Allerdings wird das Programm immer langsamer und langsamer...eindeutig ZU langsam.

    Gelöst hab ich das Bewegen wie folgt:

    For Each Bird As PictureBox In preyList
    Bird.Location = New Point(Bird.Location.X + rnd.Next(1, 4), Bird.Location.Y)
    Next Bird

    Und das ganze sitzt in nem Timer mit Intervall 1 drin.

    Nun gibt es für solche Dinge doch sicher einige gute Alternativen zum Timer die ich schlicht nicht kenne.
    Ich wäre euch für eine Erleuchtung sehr dankbar!
    wie du willst es per tastatur steuern? oder wie? mit tastatur gehts so: ( du brauchst keinen timer)

    VB.NET-Quellcode

    1. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    2. If e.KeyCode = Keys.W Then
    3. Bird.Top = OvalShape1.Top - 1
    4. End If
    5. If e.KeyCode = Keys.S Then
    6. Bird.Top = OvalShape1.Top + 1
    7. End If
    8. If e.KeyCode = Keys.A Then
    9. Bird.Left = OvalShape1.Left - 1
    10. End If
    11. If e.KeyCode = Keys.D Then
    12. Bird.Left = OvalShape1.Left + 1
    13. End If
    14. End Sub


    mfg Gugi
    dann soll er eben

    VB.NET-Quellcode

    1. Bird.Top = OvalShape1.Top - 1

    oder

    VB.NET-Quellcode

    1. Bird.Top = OvalShape1.Top + 1

    oder

    VB.NET-Quellcode

    1. Bird.Left = OvalShape1.Left - 1

    oder

    VB.NET-Quellcode

    1. Bird.Left = OvalShape1.Left + 1

    in den timer reinschreiben
    so ist es, sie bewegen sich dauerhaft

    Also hier nochmal eine genauere Beschreibung des Spiels:

    Es gibt einen Bildschirm auf dem flattern so Vögel von links nach rechts.
    Mit der Maus werden diese angeklickt(abgeschossen) und dafür gibts nen Keks(Punkt).


    @QB2VB
    könntest du mir genauer beschreiben wie es mit der do loop schleife geht?
    denn sobald ich die starte ist das prgramm ja nur noch damit beschäftigt und läuft nicht mehr weiter

    @Gugi
    Super danke! Das läuft eindeutig sehr viel schneller

    magst mir vlt jemand erklären warum das so viel schneller geht?

    ####Edit###
    Mein Fehler
    Das läuft leider genau so langsam ab

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

    Du könntest auch einfach einen BackgroundWorker oder einen neuen Thread mit dem Inhalt starten:

    VB.NET-Quellcode

    1. Private WithEvents BgWorker As New System.ComponentModel.BackgroundWorker
    2. '...
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. BgWorker.RunWorkerAsync()
    5. End Sub
    6. '....
    7. Private Sub BgWorker_DoWork() Handles BgWorker.DoWork
    8. While True
    9. '...
    10. End While
    11. End Sub
    Danke Nibel,
    das klingt schonmal gut.

    Kriege aber eine Exeption an folgender stelle:

    Private Sub MoveBirds()
    For Each Bird As PictureBox In preyList
    Bird.Left = Bird.Left + rnd.Next(1, 3)
    Next
    End Sub

    "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement Bird1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
    ein Thread/Backgroundworker ist dafür auch nicht geeignet...
    verwende am besten weiterhin einen Timer, jedoch musst du einfach die Position bei jedem Tick einfach um einen höheren Wert erhöhen...das ganze sollte dann trotz allem für dein Auge flüssig bleiben...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    nungut, ich hab mit den werten ein wenig rumgespielt und es ist annehmbar.

    Das hat nun zwar nix mit dem timer zu tun aber:
    kann mir jemand sagen wie ich die vögel "sauberer" fliegen lassen kann?

    Da ein prog mehr als tausend worte sagt hab ichs einfach mal angehangen.
    Ihr wisst dann schon was ich meine.

    *EXE-Anhang entfernt*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    cWaldi schrieb:

    nungut, ich hab mit den werten ein wenig rumgespielt und es ist annehmbar.

    Das hat nun zwar nix mit dem timer zu tun aber:
    kann mir jemand sagen wie ich die vögel "sauberer" fliegen lassen kann?

    Da ein prog mehr als tausend worte sagt hab ichs einfach mal angehangen.
    Ihr wisst dann schon was ich meine.


    Nun ja meine Antwort dazu kommt recht spät aber schreib mal in die Form_Load
    das hier mal rein.
    DoubleBuffered = True
    Damit sollten zumindest einige Graphic bugs verschwinden

    Bitte keine derart alten Threads ausgraben. Topic geschlossen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()