XNA - Bücher, Tipps, Tutorials

  • VB.NET

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von Rootbob91.

    GDI+

    - Du hast eine Leinwand
    - Du hast einen Künstler/Pinsel-Schwinger

    Die Leinwand gehört zu einem Control (z. B. eine Form), auf die Leinwand wird das Control gezeichnet (Damit Du/Wir es sehen können).
    Dein Künstler gehört immer zur Leinwand dazu, die beiden sind unzertrennlich.

    PaintEvent:

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Form1.Paint
    2. End Sub


    e As PaintEventArgs Ist das Zuhause deiner Leinwand, das Graphics-Objekt (e.Graphics).
    Den dazu gehörigen Künstler/Pinsel-Schwinger gibt es nicht wirklich als (Objekt) a la e.graphics.Künstler
    (Der Künstler soll die Methoden zum Zeichnen Darstellen).

    Gezeichnet wird über die Methoden vom Graphics-Objekt also so:

    VB.NET-Quellcode

    1. e.Graphics.DrawLine()
    2. e.Graphics.DrawRectangle()
    3. e.Graphics.DrawPolygon()
    4. e.Graphics.DrawImage()
    5. 'Gefüllte Figuren
    6. e.Graphics.FillPolygon()
    7. e.Graphics.FillRectangle()
    8. e.Graphics.FillPie()
    9. usw. [...]


    Das ganze Läuft dann ungefähr so ab:

    - Im Paint Event werden alle Objekte durchlaufen, welche gezeichnet werden müssen.

    VB.NET-Quellcode

    1. Private Gegner As New List(Of Gegner)()
    2. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Form1.Paint
    3. For Each gegner As Gegner In Liste_Gegener
    4. gegner.Draw(e)
    5. Next
    6. End Sub


    Nur dafür geht der Pinsel-Schwinger samt Leinwand, so zu sagen zum Gegner hin, und der Gegner
    (Das Objekt/die Instanz der Klasse Gegner) sagt dem Pinsel-Schwinger - Was - genau er - Wohin - genau zeichnen soll!

    VB.NET-Quellcode

    1. Class Gegner
    2. Position_X As Integer
    3. Position_Y As Integer
    4. BildVomGegner_Das__Sprite___vom_Gegner As Image = My.Resources.BEISPIEL_SPRITE_EINES_GEGNERS
    5. Public Sub New(ByVal PositionX, ByVal PositionY)
    6. Me.Position_X = PositionX
    7. Me.Position_Y = PositionY
    8. ' Hier könnte man auch noch "BildVomGegner_Das__Sprite___vom_Gegner" zuweisen und tausend andere Dinge ...
    9. End Sub
    10. Public Sub Draw(e As PaintEventArgs) '<--- Draw nimmt hier die "Leinwand" & den "Pinsel-Schwinger" in Form von PaintEventArgs.Graphics (Das Graphics-Objekt) entgegen
    11. ''Hier drunter sagt der Gegner (diese Objekt-Instanz der Klasse Gegner) dem Graphics-Objekt, was es zu zeichnen hat:
    12. e.Graphics.DrawImage(Me.BildVomGegner_Das__Sprite___vom_Gegner, Me.Position_X, Me.Position_Y)
    13. End Sub
    14. End Class


    Die Liste der Gegner muss nur noch mit Instanzen gefüllt werden:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Gegner As New List(Of Gegner)()
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    4. Gegner.Add(100,100)
    5. Gegner.Add(200,100)
    6. Gegner.Add(300,100)
    7. Gegner.Add(400,100)
    8. Gegner.Add(100,200)
    9. Gegner.Add(200,200)
    10. Gegner.Add(300,200)
    11. Gegner.Add(400,200)
    12. End Sub
    13. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Form1.Paint
    14. For Each gegner As Gegner In Liste_Gegener
    15. gegner.Draw(e)
    16. Next
    17. End Sub
    18. End Class


    Mhh irgendwie hatte ich das im Kopf besser geordnet ^^
    Ich hoffe es hilft etwas.

    Edit: Das worum es dann geht, ist das man es ganz einfach erweitern kann:

    VB.NET-Quellcode

    1. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Form1.Paint
    2. For Each gegner As Gegner In Liste_Gegener
    3. gegner.Draw(e)
    4. Next
    5. For Each auto As Auto In Liste_Autos
    6. auto.Draw(e)
    7. Next
    8. For Each haus As Haus In Liste_Häuser
    9. haus.Draw(e)
    10. Next
    11. For Each marienkäfer As Marienkäfer In Liste_Marienkäfer
    12. marienkäfer.Draw(e)
    13. Next
    14. End Sub


    Die Steigung davon, also das ganze in sauber!
    Wäre dann die Umsetzung mit dem Interface wie Artentus das schon geschrieben hat:

    VB.NET-Quellcode

    1. For Each item In renderableObjects
    2. item.Render(e.Graphics)
    3. Next


    renderableObjects sind dann alle Objekte welche gezeichnet werden müssen.
    Also alle: Gegner; Autos; Häuser und Marienkäfer.

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

    Daaaaanke Eisteeeeee!!!

    Da werde ich gleich mal alles durchwurschteln!

    Ich bin hier gerade auf Hochtouren am lernen, habe mir aus dem XNA-Tutorial die Windows Phone SDK 7.1 und das Game Studio, habe gerade ein paar Sachen ausprobiert und nun einen Sprite der sich bewegen kann (Anhang).

    Echt super wie ihr mir geholfen habt!!!
    Bilder
    • Windows Phone App.png

      99,18 kB, 710×381, 84 mal angesehen
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..