Bewegter Punkt Zeitgesteuert Halten und wieder bewegen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Der Laie.

    Bewegter Punkt Zeitgesteuert Halten und wieder bewegen

    Hallo zusammen, vllt könnt ihr mir ein Tipp geben und zwar habe ich eine Form mit Button > Start wo auch die Richtung angezeigt wird, wie sich der Punkt bewegen wird.

    leider weiß ich es (gerade) nicht wie ich es erstellen kann das der Punkt Zeitgesteuert anhält und danach wieder sich weiter bewegt. Undbei Button Stop wieder zum Stillstand kommt.

    vllt habt ihr ja einen Tipp oder Idee


    ZUSATZ: Der Punkt bewegt sich Ovalförmig


    VB.NET-Quellcode

    1. [code]
    2. Public Class FrmMain
    3. Private Enum MovementStatus
    4. ToTheRight
    5. DiagonalToDownRight
    6. DiagonalToDownLeft
    7. ToTheLeft
    8. DiagonalToUpLeft
    9. DiagonalToUpRight
    10. End Enum
    11. Private CurrentMovement As MovementStatus = MovementStatus.ToTheRight
    12. Private PictureBoxIsMoving As Boolean = False
    13. Private Sub BtnToggleMovement_Click(sender As Object, e As EventArgs) Handles BtnToggleMovement.Click
    14. PictureBoxIsMoving = Not PictureBoxIsMoving
    15. If PictureBoxIsMoving Then
    16. UpdateMovementLabelText()
    17. BtnToggleMovement.Text = ";" 'Webdingszeichen Pause ||
    18. TmrPicBoxMovement.Start()
    19. Else
    20. BtnToggleMovement.Text = "4" 'Webdingszeichen Start >
    21. TmrPicBoxMovement.Stop()
    22. End If
    23. End Sub
    24. Private Sub TmrPicBoxMovement_Tick(sender As Object, e As EventArgs) Handles TmrPicBoxMovement.Tick
    25. Select Case CurrentMovement
    26. Case MovementStatus.ToTheRight : PicBox.Left += 2
    27. Case MovementStatus.DiagonalToDownRight : PicBox.Left += 1 : PicBox.Top += 1
    28. Case MovementStatus.DiagonalToDownLeft : PicBox.Left -= 1 : PicBox.Top += 1
    29. Case MovementStatus.ToTheLeft : PicBox.Left -= 2
    30. Case MovementStatus.DiagonalToUpLeft : PicBox.Left -= 1 : PicBox.Top -= 1
    31. Case MovementStatus.DiagonalToUpRight : PicBox.Left += 1 : PicBox.Top -= 1
    32. End Select
    33. Select Case CurrentMovement
    34. Case MovementStatus.ToTheRight : If PicBox.Left > 300 Then CurrentMovement = MovementStatus.DiagonalToDownRight : UpdateMovementLabelText()
    35. Case MovementStatus.DiagonalToDownRight : If PicBox.Left > 350 Then CurrentMovement = MovementStatus.DiagonalToDownLeft : UpdateMovementLabelText()
    36. Case MovementStatus.DiagonalToDownLeft : If PicBox.Left < 300 Then CurrentMovement = MovementStatus.ToTheLeft : UpdateMovementLabelText()
    37. Case MovementStatus.ToTheLeft : If PicBox.Left < 100 Then CurrentMovement = MovementStatus.DiagonalToUpLeft : UpdateMovementLabelText()
    38. Case MovementStatus.DiagonalToUpLeft : If PicBox.Left < 50 Then CurrentMovement = MovementStatus.DiagonalToUpRight : UpdateMovementLabelText()
    39. Case MovementStatus.DiagonalToUpRight : If PicBox.Left > 100 Then CurrentMovement = MovementStatus.ToTheRight : UpdateMovementLabelText()
    40. End Select
    41. End Sub
    42. Private Sub UpdateMovementLabelText()
    43. LblCurrentMovementStatus.Text = [Enum].GetName(GetType(MovementStatus), CurrentMovement)
    44. End Sub
    45. Private Sub FrmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    46. End Sub
    47. End Class
    48. [/code]





    LG DerLaie

    *Topic verschoben*
    Bilder
    • Bewegter Punkt.JPG

      18,72 kB, 649×383, 83 mal angesehen

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

    @Der Laie Was tut der Code, was tut er nicht?
    Was genau soll passieren?
    Was verstehst Du unter "Zeitsteuerung"?
    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!
    Codequelle: Thread, Post
    Denn die Benennung vieler Komponenten kam mir doch sehr bekannt vor.

    Zum Problem und der Lösung: Man stoppe den Timer, man starte den Timer später wieder.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    So ich glaube jetzt kann man sich besser ein Bild machen, Der Start Button hat die Aufgabe das sich das Rechteck sich bewegt. Die roten kreise da soll das Rechteck kurz anhalten und danach weiter sich bewegen.

    meine Frage ist gibt es vllt 2 Möglichkeiten:



    1.Möglichkeit: das ich mit einem externen ZeitControl ( Art wie ein Timer ) die Zeit vorgebe wie lange sich das Rechteck auf den Roten kreis sich aufhält, und wenn diese Zeit abgelaufen ist in dem Control bewegt es sich weiter.

    2.Möglichkeit: das selbe wie in der 1.Möglichkeit nur halt statt mit einem Control das nur mit Quellcode zu steuern. und sich das Rechteck dann weiter bewegt.

    mein Freier Gedanke.!!

    Code gelöscht, da er mit dem aus Post#1 inhaltlich identisch war ~VaporiZed

    LG DerLaie
    Bilder
    • Bild 1 Bewegung nach Links.JPG

      25,98 kB, 647×399, 70 mal angesehen
    • Bild 1 Bewegung nach Rechts.JPG

      24,77 kB, 657×391, 49 mal angesehen
    • Bild 2 Bewegung Diagonal Rechteck.JPG

      25,7 kB, 654×390, 54 mal angesehen
    • Bild 3 Diagonale Links.JPG

      27,39 kB, 652×397, 55 mal angesehen
    • Bild 6 Diagonale Links Bewegung.JPG

      26,92 kB, 652×397, 49 mal angesehen
    • Bild 7 Diagonale Rechtsbewegung nach oben.JPG

      26,4 kB, 648×395, 54 mal angesehen
    • Bild 9 Rechteck Bewegung nach Rechts.JPG

      28,69 kB, 658×398, 51 mal angesehen
    • Oval mit Button Bewegender Punt StartStop.JPG

      26,19 kB, 673×407, 71 mal angesehen

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

    @Der Laie Warum verwendest Du den Code- und den Quellcode-Button :?:
    =====
    Mach Die eine Struktur, die alle Informationen für einen Schritt enthält:

    Quellcode

    1. Richtung {x, y}
    2. Schrittweite
    3. TickCount
    4. Warten
    .
    Wenn ohne zu Warten um die Ecke gefahren werden soll, dann ist Warten Null.
    Mach Dir eine List(Of INSTANZEN_DIESER_STRUKTUR).
    Start setzt den Strukturindex auf das Element mit Index 0.
    Dieses wird an eine Action-Klasse übergeben, die das Element abarbeitet.
    Ist es abgearbeitet, kommt ein Event an das Hauptprogramm,
    das nächste Element wird übergeben.
    Ist die Liste abgearbeitet, ist der Ablauf feddich.
    :thumbsup:
    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!
    Da der Code aus Post#5 inhaltlich identisch mit dem (von einem anderen Autor geklauten geschriebenen) Code identisch ist, habe ich ihn entfernt. Er brachte keinen Mehrwert.

    Ja, beide Möglichkeiten gehen. Sobald die PictureBox an einem Haltepunkt ist, stoppst Du den 1. Timer und startest einen 2. Timer. Sobald der "tickt", stoppst Du den 2. Timer und startest wieder den ersten und die PicBox setzt ihre Reise fort. Für die 2. Möglichkeit ergäbe es langsam mal Sinn, richtig mit Objekten zu arbeiten, will heißen: Eine Klasse Modellbahn (oder was auch immer das sein soll) zu erstellen und objektorientiert zu programmieren bzw. zu arbeiten. Und bevor Du es versuchst: Konversationen mit den bisherigen Teilnehmern dieses Threads brauchst Du nicht anzufangen: Wir werden diese ignorieren.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    hast du ein kleines Beispiel, wo ich mich dran Orientieren kann weil ich kann mir es zwar grob vorstellen was du meinst steh aber minimal auf dem Schlauch. Versuche mir gerade das Puzzel zusammen zu bauen.

    Nur eine Kleiner Hilfeschuppser brauch ich bzw eine Art Beispiel wo ich mich immer dran Orientieren kann

    LG DerLaie
    @Der Laie Hast Du es schon im Marktplatz-Forum probiert?
    vb-paradise.de/index.php/Board/931-Jobb%C3%B6rse-Marktplatz/
    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!

    Der Laie schrieb:

    was soll das sein
    (Vollzitat)
    Dort kannst Du Dir gegen eine entsprechende Gegenleistung Code schreiben lassen.
    ====
    Dein (Un-)Wesen hier im Forum ist mir etwas zu einnehmend.
    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!
    Keine Ahnung, an wen Post#8 jetzt ging, aber falls an mich:
    • 2. Timer von der Toolbox auf's Form ziehen
    • Interval auf gewünschte Wartezeit einstellen
    • wenn die PicBox ihr 1. Ziel erreicht hat, 1. Timer stoppen (TmrPicBoxMovement.Stop), 2. Timer starten
    • Im Timer2_Tick-EventHandler den 1. Timer starten und den 2. Timer stoppen
    Was ist jetzt daran so schwierig? Oder an welchem Punkt kommst Du konkret nicht weiter? "Gib mal bitte ein Beispiel" ist keine Problembeschreibung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    selbst wenn ich Bücher lese oder Youtube Videos mir angucke, wir man daraus wenig schlau und ich versuche schon viel zu lernen. Wie sol man was lernen wenn es überall nur 50% Wissen zu vermitteln ist. Youtube bombadiert dich mit Videos zu und selbst die Bücher steh nicht alles drin was man braucht. klar muss man sich dann was selbst zusammen bauen. Aber selbst an den Hochschulen wenn man es studiert werden Beipsiel, Themen gezeigt damit die studierenden mal gesehen haben bzw wissen wie sowas aussehen könnte. Ihre ideen müssen sie dann selber einbauen das ist logisch.

    LG DerLaie

    Der Laie schrieb:

    selbst wenn ich Bücher lese oder Youtube Videos mir angucke, wir man daraus wenig schlau und ich versuche schon viel zu lernen.
    Dann verwendest Du wohl falsche Bücher (welche konkret?), falsche Videos. Seit Deinem Thread, der das Thema schon mal behandelte, sind 2 Jahre vergangen. Bereits damals hatte ich den Code aus Post#1 geschickt, mit der Ansage

    ich schrieb:

    Deine Aufgaben: sichten, probieren, verstehen, anpassen, verbessern, ausbauen
    Was hast Du draus gemacht? Und was ist mit meinen konkreten Fragen aus Post#12?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Der Laie Und Du hast die Tragweite von Post #6 nicht erkannt, sonst hättest Du nachgefragt.
    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!
    erstmal danke für die schnelle Antwort!!


    nur welchen Quellcode zeile von den oben aufgeführten Vb.Net Quellcode soll ich mit deinem Vorschlag wie einfügen. Sorryy auch wenn es vllt etwas komisch klingt.
    ich versuche mir stehst nur ein Bild zuusanmen wie es aussehen soll.


    2. Timer von der Toolbox auf's Form ziehen

    Interval auf gewünschte Wartezeit einstellen

    wenn die PicBox ihr 1. Ziel erreicht hat, 1. Timer stoppen (TmrPicBoxMovement.Stop), 2. Timer starten

    Im Timer2_Tick-EventHandler den 1. Timer starten und den 2. Timer stoppen


    LG DerLaie

    Der Laie schrieb:

    nur welchen Quellcode zeile von den oben aufgeführten Vb.Net Quellcode soll ich mit deinem Vorschlag wie einfügen.
    Sorry.
    Lernbefreiung und Beratungsresistenz.
    Ich bin dann mal draußen.
    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!

    Der Laie schrieb:

    Sorryy auch wenn es vllt etwas komisch klingt.
    Es bedeutet, dass Du etwas erreichen willst, wozu Du momentan nicht in der Lage bist. Wenn die Auflistung von Schritten, die ich geschickt habe, für Dich keinen Sinn ergibt, willst Du einen Kuchen backen, obwohl Du nicht den Unterschied zwischen Backpulver, Mehl und Puderzucker kennst. Da seit sehr langer Zeit kein Weiterkommen bei Deinem Grundlagenwissen (und was ich geschrieben habe, ist in WinForms Grundlagenwissen!) zu erkennen ist, schreibe ich mir ganz fett auf einen Zettel an meinem Bildschirm:

    VB.NET-Quellcode

    1. UserIDsToIgnore.Add(25213)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Egal wie die Diskussion vorher gewesen war, ich mach mal "Senf dazu" und so... :)

    Konzeption (Mitdenken):

    Elemente sollen sich Zeitlich bewegen, und diese mittels einer "Steuerung", "anhaltbar" und wieder "fortsetzbar" sich Verhalten.
    Elemente sind geometrische Figuren, die sich auf einer anderen geometrischen Figur entlang bewegen.
    Zur Steuerung der "Animation" werden Buttons genutzt.
    Zur "Zeitlichen" Steuerung wird ein (oder mehrere) "Zeitgeber" benötigt. (Timer in .NET)

    Lösungsansätze (pseudo Planung):

    Ok, ich hole dann einmal den alten portablen CD-Player raus. Dort rupfe ich dann die Play/Pause-Taste raus. (Ungünstiger Planungspunkt) ;)

    Der Timer ist mit einer "Schrittweite" vorab zu versehen, dieser ist der "Taktgeber".
    Bei "jedem Schlag" gibt es ein "Ereignis" in .NET, dort wird das "manipulieren/animieren" auf der Zeichnung ausgeführt.
    Was dort ausgeführt wird, muss irgendwie "geskriptet" werden.

    Was hat sich der Animator bei "Findet Nemo", wohl als maßstab hergenommen? Ja, die "Frames".
    (englisch und in der Animations- und Filtechnik als "Zeitrahmen" definiert, etwas ungünstig formuliert ist aber der "Zeitgeber")

    Ausserhalb der "Animation" sind die Einzelschritte der Animation.

    Diese werden von dir festgelegt, weil du der Animator bist.
    Da wir all hier voll die krassen Programierer sind,
    animieren wir sowas natürlich "Programmatisch", und mit hilfe von "Algorithmen".

    Begriff: "Algorithmus", als Zitat aus Wikipedia.de -
    "Ein Algorithmus ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems oder einer Klasse von Problemen.
    Algorithmen bestehen aus endlich vielen, wohldefinierten Einzelschritten.
    Damit können sie zur Ausführung in ein Computerprogramm implementiert, aber auch in menschlicher Sprache formuliert werden.
    Bei der Problemlösung wird eine bestimmte Eingabe in eine bestimmte Ausgabe überführt."

    Es wäre dann wohl so das auf der "Strecke" einzelne "Punkte" anzufahren sind, und somit ergibt sich das mit "Koordinaten" gearbeitet werden muss.

    Also viele "X- und Y-Koordinaten", die sich wunderbar in "Arrays" oder "Listen/Kollektionen" ablegen lassen.
    Diese werden "gefüttert mit den einzel Koordinaten", die mit hilfe von einer "Wiederholung/Schleife" aus den Streckenpunkten die "angefahren" werden sollen.

    Somit ist es, wie bei der Modellbahn, wo kleine Teile zu einer "Gesamtstrecke" zusammen gesteckt werden, und hier nur als "Endpunkte" oder "Zwischenpunkte" zu betrachten sind,
    das alles zu deiner "Abbildung" der "Fahrt/Animation" als Algorithmus wird.

    Vogehensweise (Umsetzung und Strategie):

    Als erstes einmal zurücklehnen und das "Problem" betrachten und sich die Strecke erstellen (ist wohl schon erledigt).
    Dann die "Streckenteile" irgendwie "abstrahieren".

    Damit die Fahrt auch nicht alzu holprig wird, sich die Schrittweite zurechtlegen (Definieren), und sie mit "Pixel zu Pixel" von einer Teilstrecke irgendwie Festlegen.

    Also würde ich mir eine Schleife über die gesamtstrecke machen, und dies mit einer "verschachtelten Schleife" zwischen den "Stationen/Teilstrecken" abfahren lassen.

    So ich muss mal hier kurz Pausieren, ich komme bald zurück, mit einem folge Post.

    c.u. Joshi

    Der Laie schrieb:

    nur welchen Quellcode zeile von den oben aufgeführten Vb.Net Quellcode soll ich mit deinem Vorschlag wie einfügen. Sorryy auch wenn es vllt etwas komisch klingt.
    ich versuche mir stehst nur ein Bild zuusanmen wie es aussehen soll.


    Nimm ein Buch und fang an mit den Grundlagen. Das was du suchst ist einfach nur fertiger Code und nicht was du denkst zu wollen.
    Ein Beispiel macht ja schon genau das was du willst ohne das du irgendwas lernen musst würdest du das ganze kopieren und fertig (sieht man an alten Posts von dir)

    Schmeiß einfach mal alles übern Haufen und fang wie gesagt einfach mit den Grundlagen an und arbeite dich durch mit Projekten die auch erreichbar sind.
    Wenn du schon mit Grundbegriffen nichts anfangen kannst wirst du nie überhaupt das schaffen was du vorhast. Es ist halt ein weg den du gehen musst.

    Joshi schrieb:

    So ich muss mal hier kurz Pausieren, ich komme bald zurück, mit einem folge Post.


    Mach dir nicht die mühe, vor allem poste bitte keinen Code. Der TE hat knapp 150 Posts und noch nicht einmal irgendwo gezeigt was er selbst gemacht hat.
    Immer nur genommen, dann war er weg, dann kommt wieder ein Problem, wieder genommen usw. Er muss einfach mal anfangen selbst was zu erarbeiten oder
    stellt seine Anfrage in den Marktplatz.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen