Mitenkä sais määritettyä johonkin kuvaan läpinäkyvän väriin niin että pelissä näkyisi pelkkä piiretty kuva? Eli jos on piirtänyt tankin valkoiselle taustalle, niin pelissä näkyisi pelkää tankki eikä sen ympärillä olevaa valkoista taustaa?
Tuo on muuten ollut minullakin ongelmana jonkin aikaa. Lienee tosin vaikea kehittää, ja olen vieläpä aloittelija VB:n parissa. Tietäisikö tosiaan joku Antti L:n tapainen VB-superguru ratkaisun? :)
Teet vaikka PSP:llä transparent GIF-kuvan ja sitten isket sen sinne ohjelmaas. Ohjelmassa sitten käytät BitBlt:tä. Muistaakseni tulee VB:n mukana esimerkki ja onhan täälläkin BitBlt koodivinkkejä..
Ei PSP toimi enää. Tuli leikittyä kellon windowsin kellon kanssa.
siis windowsin kellon
Mulla ei oo PSP:tä enkä jaksa imuttaa kun on 32 mt!
Vaihtoehtoja on kaksi, helpompi=hidas, vaikeampi=nopea.
Helpompi=hidas: tee gif-kuva, jonka taustaväri on läpinäkyvä ja lataa kuva Imageen
Vaikeampi=nopea: käytä sprite-tekniikkaa: tarvitaan kaksi kuvaa, joista toinen sisältää itse kuvan mustalla taustalla ja toinen taustavärin valkoisena ja kaiken muun mustana. Kun nämä kuvat yhdistetään BitBlt:llä sopivilla parametreilla, tausta jää läpinäkyväksi.
Tässä on toinen vähintään yhtä sekava selitys:
https://www.ohjelmointiputka.net/keskustelu/706-aloittelijan-sprite-kysymyksiä
Ja jos VB:si mukana on esimerkkiprojekti calldlls.vbp, tutki sitä - siinä pomppiva pallo on toteutettu juuri tällä tekniikalla.
"..gif kuva jonka taustaväri on läpinäkyvä..."
Tyhmä kysymys: Siis mitenkä sen saa läpinäkyväksi?
GIF-kuvan taustan saa läpinäkyväksi määrittämällä jonkun sen väreistä läpinäkyväksi, tämän tekeminen riippuu täysin käytettävästä grafiikkaohjelmasta. Mutta useimmiten se löytyy jostain kuvan asetuksista, esimerkiksi Transparency-alakohdasta.
Oukei...
lainaus:
Oukei...
Oletko varmasti lukenut nuo säännöt faq:sta? Ei kuittailuja...
Joissakin grafiikkaohjelmissa voidaan kuvan läpinäkyvyys(transparency)määrittää 'exportin' yhteydessä. Siis se väri tai layeri jonka haluaa läpinäkyväksi määritellään 'exportattaessa' kuvaa GIFiksi..
Antti L. joko on valmistumassa se BitBlt opas, mistä mainitsit esimerkiksi tuolla antamassasi keskustelussa. Opas ehkä avaisi BitBlt:n salat. Oppaassa oli hyvä olla pari esimerkki kuvaakin. Käsittääkseni olet tekemässä WinAPI opasta, tuleeko BitBlt kenties tämän yhteyteen?
Tiedoksi vaan, että saa myös BMP-kuvan taustan läpinäkyväksi. Tietysti kuva ei silloin saa olla maksimissaan kuin 256 värinen. En tiedä sitten, että miten se toimii Visual Basicissa.
lainaus:
Antti L. joko on valmistumassa se BitBlt opas, mistä mainitsit esimerkiksi tuolla antamassasi keskustelussa.
Oppaaseen on tullut erinäisiä viivästyksiä, mutta valmistumassa se on. VB-opas 9 tulee käsittelemään WinApi:a, BitBlt-opas on sitten oma kokonaisuutensa.
lainaus:
Tiedoksi vaan, että saa myös BMP-kuvan taustan läpinäkyväksi.
Saako? Ei ainakaan minun ohjelmillani onnistu. Eikä BMP-formaatin määrittelystä löydy mitään läpinäkyvyydestä.
Nyt sain toimimaan. Kiitos avusta!
Juu... homma onnistuu myös kuvaa käpistelemällä, mutta windowsin API:sta löytyy menetelmät, jolla objektin muodon saa muunkin laiseksi kuin neliöksi. Seuraavassa koodit, joilla se onnistuu ikkunaan.
Homma toimii seuraavasti:
1. Luo uusi projekti
2. Luo uusi moduli, jonka nimeksi ApiServices
3. Aseta lomakkeen kooksi: Width 3450 ja Height 6705
... ja seuraavat koodit:
'**********************************************
' Nämä omaan moduliin jonka nimi on ApiServices
'**********************************************
Public Type POINTAPI
x As Long
y As Long
End Type
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' sets a region to window object
Public Declare Function SetWindowRgn Lib "User32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
' creates a polygonal region
Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
' deletes a created region
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
'**********************************
' Ja lomakkeen koodiin
'**********************************
Private Sub Form_Load()
' create non rectangular window
Dim xp(43) As POINTAPI
'upperedge leftside
xp(0).x = 0
xp(0).y = 35
xp(1).x = 26
xp(1).y = 18
xp(2).x = 57
xp(2).y = 8
xp(3).x = 86
xp(3).y = 3
'upperedge centralpoint
xp(4).x = 115
xp(4).y = 0
'upper hole
xp(5).x = 115
xp(5).y = 8
xp(6).x = 109
xp(6).y = 11
xp(7).x = 108
xp(7).y = 16
xp(8).x = 110
xp(8).y = 21
xp(9).x = 116
xp(9).y = 23
xp(10).x = 119
xp(10).y = 21
xp(11).x = 122
xp(11).y = 16
xp(12).x = 119
xp(12).y = 11
xp(13).x = 115
xp(13).y = 8
xp(14).x = 115
xp(14).y = 0
'upperedge right
xp(15).x = 141
xp(15).y = 3
xp(16).x = 171
xp(16).y = 8
xp(17).x = 203
xp(17).y = 18
xp(18).x = 226
xp(18).y = 35
' rightside
xp(19).x = 233
xp(19).y = 90
xp(20).x = 235
xp(20).y = 205
xp(21).x = 233
xp(21).y = 300
'loweredge right
xp(22).x = 226
xp(22).y = 410
xp(23).x = 199
xp(23).y = 425
xp(24).x = 172
xp(24).y = 435
xp(25).x = 141
xp(25).y = 443
'loweredge centerpoint
xp(26).x = 115
xp(26).y = 447
' lowerhole
xp(27).x = 115
xp(27).y = 439
xp(28).x = 119
xp(28).y = 437
xp(29).x = 121
xp(29).y = 432
xp(30).x = 119
xp(30).y = 427
xp(31).x = 116
xp(31).y = 425
xp(32).x = 109
xp(32).y = 427
xp(33).x = 107
xp(33).y = 432
xp(34).x = 109
xp(34).y = 437
xp(35).x = 115
xp(35).y = 439
xp(36).x = 115
xp(36).y = 447
'loweredge leftside
xp(37).x = 86
xp(37).y = 443
xp(38).x = 57
xp(38).y = 435
xp(39).x = 26
xp(39).y = 425
xp(40).x = 0
xp(40).y = 410
xp(41).x = 5
xp(41).y = 400
xp(42).x = 5
xp(42).y = 45
' create polygonal region from given points
arec = Apiservices.CreatePolygonRgn(xp(0), 43, 2)
' set region to window
Apiservices.SetWindowRgn Me.hWnd, arec, True
End SubKoodi saa aikaiseksi suorakaiteen muotoisen pysty lomakeen, jonka ylä- ja alalaita ovat kaarevat. Ylä- ja alalaidassa lomaketta on lomakeessa todellinen reikä.
Lomakieen muotoa voi käpistellä muokkaamalla xp(n)POINTAPI:n koordinaatteja. Koordinaatit määritellään myötäpäivään lomakeen ympäri.
Sellaista...
Ei jumalauta :) Tuohan on nerokas koodi, tuolla tavalla varmaan tehdään peleihin ne ympyrän (tms) muotoiset aloitusformit.
Täysin omaa koodia - kirjoitin sen eräseen projektiin, jossa piti luoda erikoinen käyttöliittymä graafikon visioiden mukaan. Saa vapaasti käyttää lainata ja muokata ;)
Koodi luo lomakkeen vasempaan laitaan loven, josta tuli napsauttamalla ulos vedettävä toinen lomake rinnalle, jossa oli erilaisia asetuksia...
Aihe on jo aika vanha, joten et voi enää vastata siihen.