Hallo Community!
Erstmal freu ich mich nun auch hier zu sein. Gute Tutorials hab ich mir hier bereits als Gast angeschaut.
Da ich mich laaaangsam in richtung Spieleprogrammierung vorantasten möchte, habe ich damit angefangen eine klitzekleine Spiele-Engine zu schreiben.
Ziel von ihr soll es sein, dass man mehrere "Objekte" hat, die auf einem Hintergrundbild dargestellt werden. (Die soll man dann in späteren Schritten auch bewegen können. Aber das sollte ich dann wahrscheinlich selbst hinbekommen.)
Das Programm ist auch soweit, dass es Ergebnise anzeigt.
Das Problem liegt momentan aber noch in 2 Punkten:
1.) Wenn ich die Objekte zeichne, "flackern" diese. Irgentwie würde sich das Problem mit einem "Bilderbuffer" lösen lassen. Aber ist das dafür wirklich die inteligenteste Lösung?
2.) Die Performance. Bereits bei einem Objekt meldet der Taskmanager eine CPU-Auslastung von knapp 8%. Wenn später noch weitere Prgrammteile dazukommen fürchte ich, dass sich das doch sehr stark hochschaukelt.
Deswegen wollte ich mal fragen ob jemand mir hier Vorschläge geben kann, wie ich das Programm verbessern kann.
My.Resources.Background ist ein hintergrundbild mit farbübergängen (bmp)
My.Resources.fussball2 ein png-Bild eines Fußballes mit Transparents.
Ich hoffe, das ist kein komplett Hoffnungsloser Fall (Bitte möglichst umfangreich/einfach antworten - mit Grafik habe ich noch nie etwas gemacht.)
Erstmal freu ich mich nun auch hier zu sein. Gute Tutorials hab ich mir hier bereits als Gast angeschaut.
Da ich mich laaaangsam in richtung Spieleprogrammierung vorantasten möchte, habe ich damit angefangen eine klitzekleine Spiele-Engine zu schreiben.
Ziel von ihr soll es sein, dass man mehrere "Objekte" hat, die auf einem Hintergrundbild dargestellt werden. (Die soll man dann in späteren Schritten auch bewegen können. Aber das sollte ich dann wahrscheinlich selbst hinbekommen.)
Das Programm ist auch soweit, dass es Ergebnise anzeigt.
Das Problem liegt momentan aber noch in 2 Punkten:
1.) Wenn ich die Objekte zeichne, "flackern" diese. Irgentwie würde sich das Problem mit einem "Bilderbuffer" lösen lassen. Aber ist das dafür wirklich die inteligenteste Lösung?
2.) Die Performance. Bereits bei einem Objekt meldet der Taskmanager eine CPU-Auslastung von knapp 8%. Wenn später noch weitere Prgrammteile dazukommen fürchte ich, dass sich das doch sehr stark hochschaukelt.
Deswegen wollte ich mal fragen ob jemand mir hier Vorschläge geben kann, wie ich das Programm verbessern kann.
VB.NET-Quellcode
- Public Class Form1
- Public Structure Bildobjekte_struct 'Die späteren Objekte
- Public info As String 'Hier kann z.B. ein Name
- Public bild As Image 'Das aussehen des Objekts
- Public x As Int16 'Wo es in X-Richtugn ist
- Public y As Int16 'und in y-richtung
- Public gesch As Double 'Die geschwindikeit. Noch ohne Zweck
- Public winkel As Double 'Die Richtung, noch ohne Zweck
- End Structure
- Const ziel_fps As Int16 = 50 'Die gewünschten Bilder pro Sekunde
- Dim Anzahl_bildobjekte As Int16 = 0
- Dim Bildobjekte() As Bildobjekte_struct
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Timer1.Enabled = True 'male das Hintergrundbild.
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- 'Hiermit wird ein neues Bildobjekt erstellt.
- ReDim Bildobjekte(Anzahl_bildobjekte)
- Bildobjekte(Anzahl_bildobjekte).info = InputBox("Wie soll das Objekt heißen?", "Informationen benötigt.", "Fußball")
- With Bildobjekte(Anzahl_bildobjekte)
- .bild = My.Resources.fussball2
- .x = InputBox("X-Position", "Informationen benötigt.", "10")
- .y = InputBox("Y-Position", "Informationen benötigt.", "10")
- .gesch = 0
- .winkel = 0
- End With
- Anzahl_bildobjekte += 1
- End Sub
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- 'Dieser Timer malt alle ziel_fps Sekunden das Bild.
- Timer1.Interval = ziel_fps 'stellt die gewünschten FPS ein.
- Dim graphic As Graphics = Me.CreateGraphics
- Dim bg As Image = My.Resources.Background
- Zeichne_BG(bg, graphic)
- Zeichne_Bildobjekte(graphic)
- End Sub
- Public Sub Zeichne_BG(ByVal bg As Image, ByVal graphic As Graphics)
- Dim nullpunkt As Point
- nullpunkt.X = 0
- nullpunkt.Y = 0
- graphic.DrawImage(bg, nullpunkt)
- End Sub
- Public Sub Zeichne_Bildobjekte(ByVal graphic As Graphics)
- If Not Anzahl_bildobjekte = 0 Then
- For c As Int16 = 0 To Anzahl_bildobjekte - 1
- Dim punkt As Point
- punkt.X = Bildobjekte(c).x
- punkt.Y = Bildobjekte(c).y
- graphic.DrawImage(Bildobjekte(c).bild, punkt)
- Next c
- End If
- End Sub
- End Class
My.Resources.Background ist ein hintergrundbild mit farbübergängen (bmp)
My.Resources.fussball2 ein png-Bild eines Fußballes mit Transparents.
Ich hoffe, das ist kein komplett Hoffnungsloser Fall (Bitte möglichst umfangreich/einfach antworten - mit Grafik habe ich noch nie etwas gemacht.)