Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: BitBlt piirto (Muutos Antin vinkkiin)

JoreSoft [04.03.2004 10:44:26]

#

Tarvitsin BitBlt-funktiota, ja yritin soveltaa Antin laittamaa vinkkiä, huomasin kuitenkin pian että koko ruutua ei kannata kopioida, vaan kopioidaan vain se alue, jonka Sprite peittää. (Mahdollistaa usean spriten käytön)

F1-Form

'Sprite-grafiikan käyttöä BitBlt-Api-funktion ja
'kaksoispuskoroinnin avulla VB:llä Ohjelmointiputkaa
'(www.ohjelmointiputka.net) varten
'
'Copyright Antti Laaksonen 2002
'Muutokset Jorma Jaakkola 2004
'JoreSoft@pp.inet.fi
'
'Poista alkuperäisestä kontrollita pPuskuri, ja luo uusi saman niminen kopioimalla Strite.
Private Sub Form_GotFocus()
    Timer1.Enabled = True
End Sub

Private Sub Form_LostFocus()
    Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
    pii = 4 * Atn(1)
    i = i + 0.01
    If i >= 2 * pii Then i = 0
    'uudet koordinaatit
    x = Sin(i) * 150 + pKuva.Width / 2 - 25
    y = Cos(i) * 150 + pKuva.Height / 2 - 25
    Piirto
End Sub

Private Sub Form_Unload(Cancel As Integer)
    'ohjelma sulkeutuu varmasti
    End
End Sub

F2-Form

Siirrä tänne pMask, pSprite, ja pPuskuri. Laita kaikken AutoReDraw-arvoksi true.

Uusi moduuli

Global i As Single, pii As Single
Global x As Single, y As Single
Global vx As Single, vy As Single
Global z As Long, a As Single
'BitBlt-funktion määrittely
Public Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

Sub Piirto()
            If vx > 0 Then
            'siirretään puskurin kuva näkyville
            z = BitBlt(F1!pKuva.hDC, vx, vy, 32, 32, F2!pPuskuri.hDC, 0, 0, vbSrcCopy)
            End If
            'palautetaan vanha kuva
            z = BitBlt(F2!pPuskuri.hDC, 0, 0, 32, 32, F1!pKuva.hDC, x, y, vbSrcCopy)
            'piirretään sprite
            z = BitBlt(F1!pKuva.hDC, x, y, 32, 32, F2!pMaski.hDC, 0, 0, vbSrcAnd)
            z = BitBlt(F1!pKuva.hDC, x, y, 32, 32, F2!pSprite.hDC, 0, 0, vbSrcInvert)
            vx = x: vy = y
End Sub

'vbDstInvert   Inverts the destination bitmap
'vbMergeCopy   Combines the pattern and the source bitmap
'vbMergePaint  Combines the inverted source bitmap with the destination bitmap by using Or
'vbNotSrcCopy  Copies the inverted source bitmap to the destination
'vbNotSrcErase Inverts the result of combining the destination and source bitmaps by using Or
'vbPatCopy     Copies the pattern to the destination bitmap
'vbPatInvert   Combines the destination bitmap with the pattern by using Xor
'vbPatPaint    Combines the inverted source bitmap with the pattern by using Or.
'              Combines the result of this operation with the destination bitmap by using Or
'vbSrcAnd      Combines pixels of the destination and source bitmaps by using And
'vbSrcCopy     Copies the source bitmap to the destination bitmap
'vbSrcErase    Inverts the destination bitmap and combines the result with the source bitmap by using And
'vbSrcInvert   Combines pixels of the destination and source bitmaps by using Xor
'vbSrcPaint    Combines pixels of the destination and source bitmaps by using Or

JoreSoft [06.03.2004 10:24:35]

#

Lataa pKuva.Picture kuvaksi haluamasi kuva.
Rivi kommentti 'palautetaan vanha kuva' pitäisi olla 'kopioidaan uusi kuva puskuriin'

JoreSoft [06.03.2004 10:56:01]

#

Alkuperäinen koodi, löytyy täältä.

https://www.ohjelmointiputka.net/tiedostot/spriteo_vb.zip

moptim [31.08.2006 15:39:04]

#

minun systeemi taustakuvalle:

For i = 0 To pKuva.Width
    pPuskuri.Line (i, 0)-(i, pKuva.Height), RGB(255, 0 + i, 0)
Next

EDIT:kannattaa kokeilla

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta