vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Sprite-Engine für vb.net 
Autor: Ortech
Datum: 03.08.07 10:39

Hallo,

ich möchte mir eine Spiele-Engine schreiben, wo ich z.B. Sprites über den Bildschirm bewegen kann und auf Kollision mit Bildschirmhintergrund oder mit anderen Sprites abfragen kann.
Dazu muß man ja u.a. XOR Verknüpfungen der einzelnen Bitmaps machen. Doch wie das geht, weiß ich nicht. Kann mir da jemand helfen? eine andere Möglichkeit wäre mit transparenten Farben zu arbeiten, aber hier hab ich auch keine Ahnung.
Ich kenne die bitblt-Methode der GDI, aber da muß ich jedes Bitmap in eine PictureBox laden, die zur Laufzeit erstellt wird und anschließend benötige ich von jeder PictureBox das hDC dazu. Programmiert hätte ich es ja soweit, aber es funktiniert nicht. Deshalb suche ich (auch) nach einer Alternative. Außer jemand kann mir meinen Fehler erklären.
Hier der code:
 Friend Sub Paint(ByVal s As Bitmap, ByVal smask As Bitmap, ByVal x As Integer, _
   ByVal y As Integer)
        Dim g As Graphics = Form1.PictureBox1.CreateGraphics
        Dim g2 As Graphics = Form1.PictureBox2.CreateGraphics
        Dim Pbox(9) As PictureBox
        For i As Integer = 0 To 1
            Pbox(i) = New PictureBox
        Next
        Form1.PictureBox2.Load(myPfad + "hintergrundmitgang.gif")
        Pbox(0).Load(myPfad & "ufo.gif")
        Pbox(1).Load(myPfad & "ufo_mask.gif")
        Using dcDest As New GdiDeviceContext(g)
            Using dcSrc As New GdiDeviceContext(g2)
                Using dcBitmap As New GdiDeviceContext(Pbox(0).CreateGraphics)
                    Using dcSrcMask As New GdiDeviceContext(Pbox( _
                      1).CreateGraphics)
                        BitBlt(dcDest, 0, 0, Form1.PictureBox1.Width, _
                        Form1.PictureBox1.Height, dcSrc, 0, 0, _
                        TernaryRasterOperations.SRCCOPY)
                        BitBlt(dcDest, x, y, Pbox(0).Image.Width, Pbox( _
                        0).Image.Height, dcBitmap, 0, 0, _
                        TernaryRasterOperations.SRCAND)
                        BitBlt(dcDest, x, y, Pbox(1).Image.Width, Pbox( _
                        1).Image.Height, dcSrcMask, 0, 0, _
                        TernaryRasterOperations.SRCINVERT)
                    End Using
                End Using
            End Using
        End Using
        'g.DrawImage(Pbox(1).Image, x, y)
    End Sub
Ergebnis:
das erste bitblt funktioniert! Auch mit den richtigen Bitmaps.
die beiden anderen nicht! Darin befindet sich als Bitmap irgendein Hintergrundausschnitt vom Visual Studio, doch ich hab die beiden Pbox(0) und Pbox(1) doch weiter oben mit dem 'load' Befehl geladen! Wenn man das ausge-REM-te 'g.DrawImage(Pbox(1).Image, x, y) ausführt, wird ja auch mein Ufo angezeigt!!?!?
Was läuft hier schief? Ich nehme an, daß die dc's von den zur Laufzeit generierten Pbox'en nicht stimmen. aber warum?

Schöne Grüße,
Alois
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Sprite-Engine für vb.net1.915Ortech03.08.07 10:39
Re: Sprite-Engine für vb.net1.215GPM03.08.07 12:21
Re: Sprite-Engine für vb.net1.224Ortech03.08.07 13:44
Re: Sprite-Engine: Kollision abfragen1.199Ortech05.08.07 12:55

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel