DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
Post Reply
User avatar
elmo123
Active Member
Posts: 153
Joined: Sun Sep 09, 2007 4:19 pm

DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by elmo123 » Sat Dec 08, 2007 12:31 pm

Väsäsin tällaisen funkkarin, joka piirtää läpinäkyvän pisteen ruudulle. Omalla hitaalla Windows 98:lla Get- ja Putpixel2-komennoista huolimatta funkkari on melko hidas (syynä voi olla nuo laskentarivit).

Käyttö:

x,y = paikka, johon piirretään se piste

alpha = näkyvyys. 100 = täysin näkyvä, 50 = puolinäkyvä, 0 = näkymätön

buf = käytettävä puskuri. Jos olet jo lukinnut tarvittavan puskurin, pistä tämä nollaksi ja kol-parametri -1:hdeksi

ret = jos tämä ei ole 0, jätetään koko piste piirtämättä ja palautetaan haluttu värikomponentti. 1 = punainen, 2 = vihreä, 3 = sininen, 4 = pikseliarvo.
Oletuksena 0

kol = jätä 0:ksi, jos et ole lukinnut käytettävää puskuria. Muuotin pistä tämän paikalle -1 ja buf-parametrin paikalle 0.

Funkkarin seassa muitakin funkkareita ja esimerkki ;)

Code: Select all

'Piirtää läpinäkyvän pisteen, nykyisellä piirtovärillä tietenkin :)

SCREEN 400,300,0,0

lawn = LoadImage("Media\grass.bmp")
f = MakeObjectFloor()
PaintObject f,lawn
Repeat

    DrawGame

    juu=MouseX()/4
    
    Color cbRed
    
    mx = MouseX()
    my = MouseY()
    
    
    Lock 
    For x = 0 To 10
        For y = 0 To 10
            DrawAlphaDot(MX+x,MY+y,juu,0,0,-1)
        Next y
    Next x
    
    Unlock

    DrawScreen
Forever
'x,y = Pisteen x- ja y-koordinaatti
'alpha = läpinäkyvyysarvo. 100 = täysin näkymätön, 0 = tavallinen piste
'buf = Käytettävä puskuri. Oletuksena näyttö (SCREEN())
'ret = Palautetaanko käytetty väri. Jos muu kuin nolla, ei piirrä mitään pistettä ja palauttaa r,g tai b- komponentin

Function DrawAlphaDot(x,y,alpha,buf=0,ret=0,kol=0)

    alpha = 100 - alpha

    oldr = getRGB(RED)
    oldg = getRGB(GREEN)
    oldb = getRGB(BLUE)

    If buf = 0 Then buf = SCREEN()
    
    If kol<>-1 Then Lock buf
    c = GetPixel2(x,y)
    If kol<>-1 Then Unlock buf
    
    
    r = PixelToColorComp(c,1)
    g = PixelToColorComp(c,2)
    b = PixelToColorComp(c,3)
    
    Rdif = r - oldr
    Gdif = g - oldg
    Bdif = b - oldb
    
    rPlus# = NumToPercent(Rdif,alpha)
    gPlus# = NumToPercent(Gdif,alpha)
    bPlus# = NumToPercent(Bdif,alpha)
    
    c = ColorToPixelComp(oldr + rPlus#, oldg + gPlus#, oldb + bPlus#)
    
    If ret=1 Then Return oldr + rPlus#
    If ret=2 Then Return oldg + gPlus#
    If ret=3 Then Return oldb + bPlus#
    If ret=4 Then Return c
    
    If kol<>-1 Then Lock buf
    PutPixel2 x,y,c
    If kol<>-1 Then Unlock buf
    
    
    Color oldr,oldg,oldb
    
End Function 

'laskee annetusta luvusta halutun prosenttimäärän
'num# = luku,josta lasketaan prosentit
'prosentit = prosenttiarvo. Esim 100 prosenttia
'luvusta 10 on 10,50% on 5,10% on 1 jne...
Function NumToPercent#(num#,prosentit#)
prosentit#=prosentit#/100.0
Return num#*prosentit#
EndFunction

'tämä on käänteinen NumToProcent()-funktiolle.
'num# = sama kuin ylemmässä
'prosentit# = desimaaliluku. Esimerkiksi
'num# on 100 ja prosentit# on 5. Siten tulos
'on 5.
Function PercentToNum#(num#,prosentit#)
prosentit#=100.0/prosentit#
Return num#*prosentit#
EndFunction 

Function ColorToPixelComp(r,g,b)
Return ( B + (G Shl 8) + (R Shl 16) + (255 Shl 24) )
End Function 

Function PixelToColorComp(c,ret)
If ret=1 Then Return ((c Shl 8) Shr 24)
If ret=2 Then Return ((c Shl 16) Shr 24)
If ret=3 Then Return ((c Shl 24) Shr 24)
End Function 
EDIT:

Tää koodi oli mulla Funktiot-kansiossa korjasin jo polun
2.Edit: Olisi kiva jos joku pistäisi kommentteja funkkaristani :?

Last edited by elmo123 on Tue Dec 11, 2007 9:10 pm, edited 2 times in total.
Kiinnostuin pelien tekemisestä ennen 1. luokkaa.
Sitten 3. luokalla tuli CB. Ja siitä se alkoi.

Blender! TF2! CB! Game Maker! Nokia-mollaus! Kitaransoitto! Breakdance! MadTracker! Minecraft!

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by Koodiapina » Sat Dec 08, 2007 1:03 pm

Korjailes vähä viel tota koodii. Eka tuli "Can't load image ..\media\grash.bmp" ja kun korjasin tuon tiedostopolun niin MAV ;) Edittaan tähän mielipiteeni sit kun toimii.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
jannepelaa
Active Member
Posts: 101
Joined: Tue Aug 28, 2007 2:27 pm

Re: DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by jannepelaa » Mon Dec 10, 2007 7:13 pm

Näyttöni ei pysty näyttämään ohjelmaa. Tulee "Frequency out of range". Näyttö on joku Fujitsu Siemensin.

User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by CCE » Mon Dec 10, 2007 10:33 pm

jannepelaa wrote:Näyttöni ei pysty näyttämään ohjelmaa. Tulee "Frequency out of range". Näyttö on joku Fujitsu Siemensin.
No ihmekkös tuo kun resoluutioksi määritellään 400x300 kokoruututila. :P

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by axu » Tue Dec 11, 2007 7:55 pm

siis pystyykö CB:llä piirtämään suoraan ruudulle ilman dll:lää????
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

User avatar
Harakka
Advanced Member
Posts: 430
Joined: Mon Aug 27, 2007 9:08 pm
Location: Salo
Contact:

Re: DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by Harakka » Tue Dec 11, 2007 8:23 pm

Ei, mutta sitä varten on jo DLL. CbFUN:in _PutPixel() mahdollistaa suoraan näytölle piirron.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)

naabster
Member
Posts: 56
Joined: Sat Sep 22, 2007 10:10 am

Re: DrawAlphaDot - piirtää läpinäkyvän pisteen(melko hidas)

Post by naabster » Mon Dec 31, 2007 11:06 pm

kun siirrän hiirtä vasempaan alakulmaan tulee MAV :shock:

Post Reply