Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse

Artig å se flere Jonaser her =)

Takk for kommentaren forresten!

Jeg er selv helt ny i dette forumet, men har skrevet vb i en 4-5 års tid nå, til og fra.

 

Bitblt er utrolig kjekt når en skal lage spill og grafikk i vb, det er ikke like kraftig som direct draw kan være, men til gjengjeld er det en API funksjon og støttes derfor av alle moderne windows versoner uten at noe som helt må legges til.

 

for å bruke bitblt må funksjonen først deklareres:

(Public eller Private) 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

 

siden bitblt er en funksjon vil den strengt tatt returnere en Long verdi, men den kan vi drite tynt i siden bitblt så godt som aldri feiler (ikke til min kjenskap i alle fall =)

 

slik brukes bitblt

 

BitBlt Målhdc, X, Y, W, H, kilehdc, sX, sY, Tegnemåte

 

Målhdc = hdc verdien til det du vil tegne på, f. eks Form1.hdc eller Picture1.hdc

X = Hvor på Målhdc du vil begynne å tegne (husk å sette Scalemode verdien på bilde til "3 - Pixels")

Y = Samme som X

W = Bredden av det du skal lime inn

H = Høyden av det du skal lime inn

kildehdc = hdc verdien til det bilde du skal "klippe ut" fra, altså der det du skal male på Målhdc ligger

sX = Hvor på kilde-bilde du skal begynne å klippe ut

sY = samme som sX

Tegnemåte = hvordan skal vi tegne kildehdc over på målhdc?

Vanlig her er

vbSrcCopy som vil lime inn en eksakt kopi

vbSrcAnd som du vil bruke med "masker"

vbSrcPaint som du vil bruke med "sprites"

 

Dette var kanskje litt forvirrende?

Jeg har noe enkle eksempler fra da jeg selv lærte meg BitBlt (noe av det jeg har fått mest bruk for ever), så hvis noen er interesert så poster jeg link =)

 

Koslig å se et norsk programerings forum!

 

Beste Hilsner

--

Jonas

Lenke til kommentar

Trenger ikke å forklare mer. Tror jeg har skjønt det nå!

Private 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
Dim i

Private Sub Form_click()
BitBlt Picture1.hDC, i, 10, 100, 100, Picture2.hDC, 1, 1, vbSrcCopy
i = i + 110
End Sub

Private Sub Form_load()
i = 10
End Sub

Tegner en boks, og flere bortover. Men hva er egentlig forskjellen på de forskjellige scalemodene? Blir så mye rot når jeg ikke vet hvor langt 1 cm er på skjermen..

 

Tusen takk :)

Lenke til kommentar
hmm.. det var ikke det beste spillet jeg har spillt feks battel field vietnam og counter-strike 1.6 er mye bedre en det spillet der!

Man kan ikke sammenligne to helt forskjellige spill.. Det er det beste ubåt spillet jeg har prøvd ;)

 

Og så har nok en del flere personer vært med i de to spillene og de programerer heller ikke vb. Vet ikke om de i cs tjener penger på det, men er ganske sikker på at de som lagde Batle Field gjorde det.

Endret av Jonas
Lenke til kommentar

Hmm.. Jeg gjorde alle stjerne unsynelige og skulle tegne de på bilde med BitBlt, men det gikk ikke så bra.. Alle stjernen kom fram, men de bare løp kryss og tvers i et mønster. Et rutenett. Slik så det ut omtrent:

m%f8nster.jpg

Her er koden:

Sub paintbord()
Picture1.Cls
Dim t
For t = 1 To stjerne.UBound
BitBlt Picture1.hDC, stjerne(t).Top, stjerne(t).Left, 2, 2, Picture3.hDC, 0, 0, vbSrcCopy
Next t
End Sub

Picture1 er hovedbilde og Picture3 er et bilde som er helt hvit (stjerne). 2 i bredde og høyde er riktig. Ser noen noe feil her?

Lenke til kommentar

Du trenger nok ikke bruke bitblt her, Jonas. Med mindre du har tengt til å lage bilder av stjerner?

Men hvis du bare skal ha prikke-stjerner kan du like gjerne bruke Line funksjonen som ligger i PictureBox. Jeg skal lage et sample til deg, så du skjønner hva jeg mener =)

Lenke til kommentar

ooookay, jeg tror jeg har noe her.

Alt du trenger er en picbox som heter Picture1, den bør helst ha sort bakgrund :)

Så kan du egentlig bare lime dette inn i kildekoden slik det er. Lykke til

 

Option Explicit
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Type aStar
X As Double
Y As Double
Vel As Double
Size As Double
End Type
Dim Stars(1 To 50) As aStar
Dim FlagEnd As Boolean

Private Sub Form_Load()
Dim NextTick As Long
Dim a As Long
   Randomize 'gi random funksjonen et nytt seed
   'plaser ut stjernene
   For a = 1 To UBound(Stars) 'loop gjennom alle stjernene
       Stars(a).X = Rnd * Picture1.ScaleWidth
       Stars(a).Y = Rnd * Picture1.ScaleHeight
       Stars(a).Size = Int(Rnd * 3) + 1
       Stars(a).Vel = (Rnd * Stars(a).Size) + (Stars(a).Size / 2)
   Next a
   Me.Show 'vis hoved Form1. Dette må gjøres manuelt siden Form_Load ikke har fullført ennå
   Do
       DoEvents 'Doevents frigjør prossesoren til å gjøre andre ting, hindrer programmet i å fryse
       'dette er en framelimiter, vi kan begresne farten på loopen
       Do Until GetTickCount > NextTick
           DoEvents
       Loop
       NextTick = GetTickCount + 30
       
       Picture1.Cls 'clear bilde
       For a = 1 To UBound(Stars) 'loop gjennom alle stjernene
           'se om sternen er utenfor venstre side
           If Stars(a).X < -5 Then
               Stars(a).X = Picture1.ScaleWidth + 5
               Stars(a).Y = Rnd * Picture1.ScaleHeight
           Stars(a).Size = Int(Rnd * 3) + 1
           Stars(a).Vel = (Rnd * Stars(a).Size) + (Stars(a).Size / 2)
           End If
           'flytt stjernen
           Stars(a).X = Stars(a).X - Stars(a).Vel
           
           'tegn stjernen
           Picture1.Line (Stars(a).X, Stars(a).Y)-Step(Stars(a).Size, Stars(a).Size), vbWhite, BF
       Next a
   Loop Until FlagEnd = True
   End
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
   FlagEnd = True
End Sub

Lenke til kommentar

Vel, jeg har vel aldri sagt at det var et BRA spill?

jeg skjønner ikke humoren... Det er klart det finnes bedre spill,

jeg har aldri hevdet noe annet.

Jeg ville bare dele noe jeg hadde laget, ikke samenligne det med

et flere hundre årsverks stort kommersielt spill.

 

Noen folk...

Lenke til kommentar

Hei,

 

Jeg vil bare takke for dette, hadde for lenge lenge siden, -94 tror jeg, et spill som het "Sink Sub Pro", det var noe à la dette her men je har aldri klart å finne igjen disketten, dette var da en fullgod erstatning, jej...

Spill behøver ikke være så veldig bra for at de skal være morsomme, liker fremdeles pacman jeg da, men det er en annen sak.

Takk igjen.

 

Mvh. Ecks::

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...