Timer für ein Spiel

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Timer für ein Spiel

    Hallo zusammen,

    Ich arbeite greade an meinen Spiel was eine Art Mini Sims darstellen soll.
    Mann kann sich einen Charackter erstellen, nun will ich aber wissen
    wie kann ich die z.B lebensanzeige ändern z.B wenn ich einen vollen Balken habe
    soll er nach einer bestimmten zeit ein wenig leer gehen.
    also für den vollen Balken nehme ich z.B eine Picturebox und nach einer bestimmten Zeit soll die Picturebox getauscht werden
    gegen eine andere die dann z.B die leerere ist.

    hoffe ihr wisst was ich meine, und bitte nicht so kompliziert.

    Mfg. Vbtutorials11
    progressbar machen aber verstecken dann timer starten maximum minimum machen dann increment 1 falls es immer +1 sein soll
    dann kannst du die bilder in den ordner des spiels rein tuhen und mit einer if abfrage im timer falls 100 % dann picture wechseln

    VbTutorials11 schrieb:

    Ich arbeite greade an meinen Spiel was eine Art Mini Sims darstellen soll.
    Mann kann sich einen Charackter erstellen, nun will ich aber wissen[...]
    Mal so ne Frage, wie hast du dir das vorgestellt? Ich mein wenn du noch nicht mal weißt, wie man mit nem Timer nen Integer bei jedem Tick um eins erhöht.
    Dein Projektziel kommt mir auch etwas zu hochgegriffen vor, aber darum soll es ja nicht gehen.

    Für ein Spiel würde ich keine Progressbar nehmen, da zeichne ich (GDI+ oder DirectX) mir lieber etwas eigenes, ist viel einfacher und besser zu Handle'n.
    Vor allem weil der Form-Designer in Spielen eh nicht benutzt werden sollte, erschwert nur die umsetzung eines GSM's.

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

    Formuliere doch mal in einfachen Worten, was Du eigentlich erreichen willst.
    Wenn Du einen guten Plan hast, setzen wir ihn gemeinsam in guten Code um.
    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!
    Soll der 'Info-Balken' über der Person/Objekt sein oder ist dieser in einem seperaten Control/Info-Panel? (Mit Panel mein ich nicht das Control).
    Und wie schon einmal gesagt, mit Pictureboxen wird das ganze echt mühsam und deine Möglichkeiten sind extrem beschränkt.
    Ich will euch mal ein Beispiel zeigen...

    Mann kann sich in einer anderen Form einen Charackter erstellen, der dann wieder auf einer anderen form Angezeigt wird.
    auf der Form wo er dann schließlich angezeigt wird soll neben ihn (egal wo auf der Form) eine picturebox seien.
    Diese picturebox ist der volle lebensbalken.
    Nun soll diese picturebox nach einer bestimmten Zeit getauscht werden durch einen neuen balken der ein wenig leerer ist.

    hoffe ihr versteht es ... :?:
    Nun soll diese picturebox nach einer bestimmten Zeit getauscht werden durch einen neuen balken der ein wenig leerer ist.

    Würde man so Spiele programmieren, dann wären die nochmal mind. 10 mal so groß und natürlich schön langsam...
    3D könnte man dann auch vergessen...
    (GDI+ oder DirectX)

    Das würde ich dir Empfehlen, gibts auch im Forum gute Tutorials zu beidem...
    Im 2D Bereich ist das wirklich Pipifax, du hast mehr Möglichkeiten es ist Performanter und du wirst keine Probleme mit Flackern bekommen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Nimm ne Progressbar einen timer setz den timer auf interval 5000 oja und auf Enabled=true
    du musst vorher aber noch die progressbar uaf value 100 setzen

    Public Class Form1

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    ProgressBar1.Value = ProgressBar1.Value - 1
    If ProgressBar1.Value = 0 Then
    Timer1.Enabled = False
    MsgBox("Du bist tot oder so")
    End If
    End Sub
    End Class

    bitte lern was draus und bitte kein C&P
    es soll kein richtiges game werden es soll eine form seinen wo drauf steht wie viel leben man noch hat, und wo der charackter den man erstellt hat (der charackter ist nur ein pick) zu sehen ist.

    mit dem charackter habe ich keine probleme nur wie lasse ich das leben ändern in bestimmten zeiten und wieder auffüllen.
    Wo ist das Problem?

    Wenn Du es nicht richtig machen willst ist dein vorhaben doch ganz einfach.
    Du nimmst die Position der Picturebox, ziehst ein paar Pixel vom Y Wert ab, schon hast Du die Position der Progressbar.

    Haust ein Timer in die Form:
    Ins Form Load packst Du: Timer1.Start
    Intervall ist z.B. 5000.
    In das Tick Event haust Du: Prograssbar1.Value -= 1

    Fertig

    Zum auffüllen nutzt Du den selben Timer mit Abfragen oder Modifiern.
    Oder halt einen zweiten Timer ist ja egal.
    so jezz mal ein c&p code weil sonst drehen wir uns nur im kreis.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Timer1.start()
    3. timer1.intervall = 8000 ' alle 8 secunden geht die value um 1 runter
    4. End Sub
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. Progressbar1.value -=1 ' bei jedem tick value -1
    7. if progressbar1.value = 1 Then ' wenn die value = 1 dann soll er das machen was du machen lassen willst wenn die person tot ist in meinem fall eine msg und ein anderes bild in der picbox
    8. Messagebox.show("ich würde mal sagen du bist tot XD FAIL")
    9. PictureBox1.Image = My.Resources.tot ' ist nicht pflicht
    10. end if
    11. End Sub




    ps: wenn du nicht die grundlagen verstehst dann wirst du IMMER mit c&p codes arbeiten und das mach für dich und für das forum ken spass
    Und von mir gibts ein Beispiel für GDI+
    Spoiler anzeigen

    Es müssen keine Controls in die Form.
    Es sollte ein *.png Bild im Anwendungsverzeichnis liegen, muss für das Beispiel aber net.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim g As Graphics
    3. Dim intHealth As Integer = 100 'Lebensenergie
    4. Dim intMana As Integer = 100 'Mana
    5. Dim Health_bar_Location, Mana_bar_Location, Char_Location As Point
    6. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Me.DoubleBuffered = True 'Flackern beim Zeichnen reduzieren
    8. 'Positionen der Grafiken
    9. Health_bar_Location = New Point(10, 10)
    10. Mana_bar_Location = New Point(10, 20)
    11. Char_Location = New Point(10, 30)
    12. End Sub
    13. Dim WithEvents Tmr As New Timer With {.Interval = 500, .Enabled = True}
    14. Private Sub Tmr_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tmr.Tick
    15. intHealth -= 10 'Health runterzählen
    16. If intHealth < 0 Then intHealth = 100
    17. intMana -= 5
    18. If intMana < 0 Then intMana = 100
    19. Me.Invalidate() 'Form neu zeichnen
    20. End Sub
    21. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    22. g = e.Graphics
    23. 'Healthbar zeichnen
    24. g.FillRectangle(Brushes.Black, Health_bar_Location.X, Health_bar_Location.Y, 99, 9) 'Schwarzer Container
    25. g.FillRectangle(Brushes.LightGreen, Health_bar_Location.X, Health_bar_Location.Y, intHealth, 9) 'Grüner Balken
    26. 'Manabar zeichnen
    27. g.FillRectangle(Brushes.Black, Mana_bar_Location.X, Mana_bar_Location.Y, 99, 9) 'Schwarzer Container
    28. g.FillRectangle(Brushes.Blue, Mana_bar_Location.X, Mana_bar_Location.Y, intMana, 9) 'Blauer Balken
    29. 'Char zeichnen (wenn das Bild vorhanden ist)
    30. If IO.File.Exists(Application.StartupPath & "\char.png") Then
    31. g.DrawImage(Image.FromFile(Application.StartupPath & "\char.png"), Char_Location.X, Char_Location.Y, 100, 120)
    32. End If
    33. 'Rahmen drum
    34. g.DrawRectangle(Pens.Black, Char_Location.X, Char_Location.Y, 100, 120)
    35. End Sub
    36. End Class

    VB.NET-Quellcode

    1. Private Sub Timer()
    2. Dim Second As Integer = 0
    3. Dim TimerSeconds As Integer = 0
    4. Dim WaitSeconds As Integer = 10 'Es sollen 10 sekunden vergehen. :D
    5. While True
    6. If Second <> Date.Now.Second Then
    7. Second = Date.Now.Second
    8. If TimerSeconds <> WaitSeconds 'im beispiel also 10 sekunden
    9. End While
    10. Else
    11. TimerSeconds = Date.Now.Second
    12. End If
    13. End If
    14. End While
    15. 'Hier irgend etwas nach ablauf der 10 sekunden (WaitSeconds) machen
    16. 'Also viel spass :)
    17. End Sub


    Damit lässt sich ein prima Timer machen:D
    @BeefyX:
    Was soll denn diese Schleife? Soll sich denn die GUI aufhängen?
    Numm eine Kennung und organisiere das Timer-Intervall so, dass zu jedem Tick ein Ablauf vorkommt.
    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!

    BeefyX schrieb:

    Damit lässt sich ein prima Timer machen

    Ja nee is klar Atze ...

    VB.NET-Quellcode

    1. While True
    2. If Second <> Date.Now.Second Then
    3. Second = Date.Now.Second
    4. If TimerSeconds <> WaitSeconds 'im beispiel also 10 sekunden
    5. End While
    6. Else
    7. TimerSeconds = Date.Now.Second
    8. End If
    9. End If
    10. End While


    Übersetzung: Blockiere den GUI-Thread für x Sekunden, so dass die ganze Anwendung komplett einfriert und der User denkt, die Drecksapp wäre mal wieder abgeschmiert, weil Windows ständig behauptet "Dummapp reagiert nicht".