Roulette Animation

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

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

    Roulette Animation

    Moin,
    ich bin gerade dabei, ein kleines Programm zu entwickeln, was so ähnlich wie Roulette funktioniert. Man setzt auf Schwarz, Rot oder Grün, drückt auf einen Knopf, wodurch eine Animation gestartet wird, wo Panels mit der Farbe vorbeiziehen und langsamer werden.
    Mein Problem ist, dass sich beim "vorbeiziehen" die Panels voneinander entfernen.
    Den Code zum Bewegen:

    VB.NET-Quellcode

    1. Dim speed As Double = 20.0
    2. If (Panel1.Location.X < 390) Then
    3. Panel1.Location = New Point(Panel1.Location.X + speed)
    4. Else
    5. Panel1.Location = New Point(Panel1.Location.X = 0)
    6. End If

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. speed = 20.0
    3. Timer1.Start()
    4. End Sub

    Das habe ich in einen Timer gestell und mache dies für jedes Panel. Im Anhang habe ich nochmal ein Screenshot von dem Problem.

    Liebe Grüße
    Bilder
    • Screenshot_19.jpg

      2,69 kB, 209×52, 798 mal angesehen
    Ich kam, sah und vergaß, was ich vorhatte.

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

    @Cozy Das Forum besitzt eine Datei-Anhang-Funktionalität: Erweiterte Antwort => Dateianhänge => Hochladen.
    Bearbeite bitte Deinen Post eentsprechend.
    =====
    Momentan hast Du beschrieben, was Du nicht haben willst.
    Kannst Du bitte mal sagen, wie das aussehen soll?
    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!

    Cozy schrieb:

    Animation gestartet wird, wo Panels mit der Farbe vorbeiziehen und langsamer werden.
    Mein Problem ist, dass sich beim "vorbeiziehen" die Panels voneinander entfernen.
    Hmm - könnte das daran liegen, dass nicht alle Panels gleichzeitig ihren speed ändern?

    Der gezeigte Code ist in dieser Hinsicht unvollständig - da bewegt sich ja nur ein Panel.
    Besser wäre, die gesamte Timer_Tick-Methode zu sehen - ich fürchte nur, die ist ziemlich lang, weil voller redundantem Code. Aber nützt nix - angucken muss man das, ums zu verbessern.

    Eine noch viel wesentliche Verbesserung: Visual Studio - Empfohlene Einstellungen
    Man sieht deim Code an, dass du Strict Off programmierst, und infolgedessen Datentypen nicht richtig auffasst und ihre Eigenheiten nicht respektierst. Ohne die verlinkten Einstellungen arbeitest du mit einer eiglich untauglichen Vb.Net-Version, also deine derzeitigen Einstellungen verhindern gradezu, dass du deine Programmier-Fähigkeiten verbesserst.

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

    @ErfinderDesRades hier hast du die gesamte Timer_Tick-Methode:

    VB.NET-Quellcode

    1. ​Dim speed As Double = 20.0

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. Label1.Text = speed
    3. If (Panel1.Location.X < 390) Then
    4. Panel1.Location = New Point(Panel1.Location.X + speed)
    5. Else
    6. Panel1.Location = New Point(Panel1.Location.X = 0)
    7. End If
    8. If (Panel2.Location.X < 390) Then
    9. Panel2.Location = New Point(Panel2.Location.X + speed)
    10. Else
    11. Panel2.Location = New Point(Panel2.Location.X = 0)
    12. End If
    13. If (Panel3.Location.X < 390) Then
    14. Panel3.Location = New Point(Panel3.Location.X + speed)
    15. Else
    16. Panel3.Location = New Point(Panel3.Location.X = 0)
    17. End If
    18. If (Panel4.Location.X < 390) Then
    19. Panel4.Location = New Point(Panel4.Location.X + speed)
    20. Else
    21. Panel4.Location = New Point(Panel4.Location.X = 0)
    22. End If
    23. If (Panel5.Location.X < 390) Then
    24. Panel5.Location = New Point(Panel5.Location.X + speed)
    25. Else
    26. Panel5.Location = New Point(Panel5.Location.X = 0)
    27. End If
    28. If (Panel6.Location.X < 390) Then
    29. Panel6.Location = New Point(Panel6.Location.X + speed)
    30. Else
    31. Panel6.Location = New Point(Panel6.Location.X = 0)
    32. End If
    33. If (Panel10.Location.X < 390) Then
    34. Panel10.Location = New Point(Panel10.Location.X + speed)
    35. Else
    36. Panel10.Location = New Point(Panel10.Location.X = 0)
    37. End If
    38. If (Panel11.Location.X < 390) Then
    39. Panel11.Location = New Point(Panel11.Location.X + speed)
    40. Else
    41. Panel11.Location = New Point(Panel11.Location.X = 0)
    42. End If
    43. If Not speed < 0.1 Then
    44. speed -= 0.1
    45. Else
    46. Dim test As Double = Label1.Text
    47. speed = Math.Round(test, 0)
    48. Label1.Text = speed
    49. Timer1.Stop()
    50. End If
    51. End Sub


    @RodFromGermany
    Hmm es genau zu beschreiben ist nicht ganz einfach. Ich möchte gerne, dass wenn man auf einen Knopf drückt, eine Animation gestartet wird, bei der die Panels in drei verschiedenen Farben (Rot, Grün und Schwarz), von rechts nach Links ziehen (endlos) und langsamer werden, bis sie schließlich zum stoppen kommen. Ich hätte noch ein YouTube-Video, wo es von Sekunde 0:41-0:50 zu sehen ist.
    Ich kam, sah und vergaß, was ich vorhatte.
    also die Berechnung der Location ist höchst ungenau, wenn die Grenze - 390 - überschritten wird.

    Aber das ist erstmal egal - mach erstmal Option Strict On, korrigiere deine Datentypen, poste den korrigierten Code, dann präsentiere ich dir eine genauere Berechnung, und kürzer, weil per Schleife auf alle Panels angewandt.

    Cozy schrieb:

    VB.NET-Quellcode

    1. Panel1.Location = New Point(Panel1.Location.X = 0)
    What :?:
    Machst Du zunächst Option Strict On.
    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!
    @ErfinderDesRades @RodFromGermany
    Da ich die Sprache nicht richtig nach Vorlagen oder Anleitungen gelernt habe, sondern das alles so eher auf learning by doing basiert, habe ich leider noch nichts von

    VB.NET-Quellcode

    1. Option Strict On
    gelesen.
    Deswegen weiß ich jetzt auch nicht, wie ich die Fehler umschreiben muss. Bei

    VB.NET-Quellcode

    1. Panel1.Location = New Point(Panel1.Location.X + speed)
    taucht dann nämlich der Fehler auf:
    Spoiler anzeigen
    Overload resolution failed because no accessible 'New' can be called with these arguments:
    'Public Overloads Sub New(sz As Size)': Value of type 'Double' cannot be converted to 'Size'.
    'Public Overloads Sub New(dw As Integer)': Option Strict On disallows implicit conversions from 'Double' to 'Integer'. Roulette C:\Users\Leon\Desktop\VB Projekte\Roulette\Roulette\Roulette\Form1.vb 7 Active

    Ich denke, dass euch dieser Fehler bereits bekannt ist, aber was bzw. wie muss ich es umschreiben, damit ich keine Fehler mehr, trotz

    VB.NET-Quellcode

    1. Option Strict On
    erhalte?
    Ich kam, sah und vergaß, was ich vorhatte.
    Ein Point hat immer x und y.
    Du aber versuchst einen Point zu erstellen, ohne dass du Y angibst - das geht nicht, (und das sagt dir auch die Fehlermeldung, nur in Formulierungen, die du erst noch verstehen lernen musst). Also gib deinen Points X und Y.

    VB.NET-Quellcode

    1. Panel1.Location = New Point(Panel1.Location.X + speed, Panel1.Location.Y)




    Ach, und nochwas:
    learning by doing
    ist ineffizient und sogar unzureichend.
    Lass dich anleiten, aus Tutorials und Büchern.
    Das System von Vb.Net/VisualStudio ist so mächtig und trickreich - nur mit Herumprobieren muss dir 80% dessen, was es bietet, verborgen bleiben.

    Weil ohne Anleitung kannst du die Selbsterklärung des Systems garnet verstehen.
    Hast du aber erst dir genügend Grundlagenwissen erarbeitet, dass du den Selbsterklärungen des Systems folgen kannst, dann steht dir im Grunde fast alles offen, denn dann weisst du, wie und wo nachlesen, und verstehst auch, was da dann steht.

    Hier eine Art "Lehrplan", der dich zu solch imstande setzen sollte: Must-Have-KnowHow

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ErfinderDesRades“ ()

    wieso arbeitest du hier mit Panels? GDI+ wird sich hier eindeutig besser eignen für.
    Auf der Suche nach Coding-Kursen auf Lence.at