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 Sub
Koodi 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.