Efektit

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

Efektit

Post by elmo123 »

Tänne voitte siis postata omakoodaamia efektejänne ;) Oma efektini on radioaktiivisuusmerkki:

Code: Select all

    ClsColor cbYellow

    Color cbBlack

    cnt = 0
    Repeat


        Nuclear(200, 150, cnt)

        cnt + 2

        DrawScreen

    Until cnt = 30000

    Function Nuclear(x, y, ang, size = 30)

        a = 0

        asize = size / 3.0

        Circle x - asize / 2, y -  asize / 2, asize

        While a < 360

            i# = -25.0

            While i# < 26

                Line x + Cos(a + 31 - i + ang) * (size / 2.5), y - Sin(a + 31 - i + ang) * (size/ 2.5), x + Cos(a + 31 - i + ang) * size, y - Sin(a + 31 - i + ang) * size

                i# = i# + (1.5 / (size / 5.0))
            Wend

        a + 120

        Wend

    EndFunction
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!
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Efektit

Post by Koodiapina »

Tälläinen todella köyhä 8 suunnan räjähdys piirtokomennoilla

Code: Select all

    SCREEN 800,600
    
    Type particles
        Field x
        Field y
        Field vr
        Field vg
        Field vb
        Field xd
        Field yd
    EndType
    
    While True
        ' Klikkaamalla "räjähdys"
        If MouseHit(1) Then Explosion(MouseX(),MouseY())
        UpdateParticles()
        DrawScreen 
    Wend 
    
    Function Explosion(x,y)
        For i=1 To 40
            p.particles = New(particles)
            p\x = x
            p\y = y
            p\xd = Rand(-3,3)
            p\yd = Rand(-3,3)
            If p\xd=0 And p\yd=0 Then
                If Rand(1) Then p\xd = 1 Else p\yd = 1
            EndIf
            p\vr = Rand(255)
            p\vg = Rand(255)
            p\vb = Rand(255)
        Next i
    EndFunction
    
    Function UpdateParticles()
        For p.particles = Each particles
            p\x = p\x + p\xd
            p\y = p\y + p\yd
            p\vr = p\vr - 5            
            p\vg = p\vg - 5
            p\vb = p\vb - 5
            Color p\vr,p\vg,p\vb
            Circle p\x,p\y,Rand(3)
            If Rand(24)=0 Then Delete p
        Next p
    EndFunction 
Last edited by Koodiapina on Fri Oct 03, 2008 8:27 pm, edited 1 time in total.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja »

Grandi wrote:Sitten tälläinen todella köyhä 8 suunnan räjähdys piirtokomennoilla
Anteeksi härski koodin muokkaus ilman mitään lupia, mutta parilla muutoksella siihen saa kaikki suunnat. IMHO hienompi, vaan mielipidekysymyshän se on n__n

Code: Select all

    SCREEN 800,600
    
    Type particles
        Field x#
        Field y#
        Field vr
        Field vg
        Field vb
        Field xd#
        Field yd#
    EndType
    
    While True
        ' Klikkaamalla "räjähdys"
        If MouseHit(1) Then Explosion(MouseX(),MouseY())
        UpdateParticles()
        DrawScreen 
    Wend 
    
    Function Explosion(x,y)
        For i=1 To 40
            p.particles = New(particles)
            p\x = x
            p\y = y
            p\xd = Rnd(-3,3)
            p\yd = Rnd(-3,3)
            If p\xd=0 And p\yd=0 Then
                If Rand(1) Then p\xd = 1 Else p\yd = 1
            EndIf
            p\vr = Rand(255)
            p\vg = Rand(255)
            p\vb = Rand(255)
        Next i
    EndFunction
    
    Function UpdateParticles()
        For p.particles = Each particles
            p\x = p\x + p\xd
            p\y = p\y + p\yd
            p\vr = p\vr - 5            
            p\vg = p\vg - 5
            p\vb = p\vb - 5
            Color p\vr,p\vg,p\vb
            Circle p\x,p\y,Rand(3)
            If Rand(24)=0 Then Delete p
        Next p
    EndFunction 
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Efektit

Post by Koodiapina »

Vaihdoit vaan noi liike-muuttujat liukuluvuiks? 0__o Missäköhän koodihumalassa mäkin oon ollu.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja »

Joo-o, tämä tuli itselläkin vastaan kun tein ensimmäistäni.

Joten yleisenä vihjeenä, käyttäkäätten efekteissä floatteja, toimivat tämän lisäksi paremmin esimerkiksi curvevaluen kanssa ja saa hyvinkin pehmeitä liikkeitä halutessaan.

EDIT: Håhåå, 600. posti.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Efektit

Post by KilledWhale »

Pieni pallerokikkailu :roll:

Code: Select all

SCREEN 600,600
Repeat
angle#=WrapAngle(angle+2)
aa=aa+1
ab=ab+suunta
If ab>200 Then suunta=-2
If ab<=0 Then suunta=2
ClsColor 128 + 127 * cos(aa * PI / 128 + aa * 90 / 74),128 + 127 * Sin(aa * PI / 128 + aa*90 / 63) ,128 - 127 * Cos(aa * PI / 128 + aa*90 / 81)
For i=0 To 3
  Color 128 + 127 * Cos(aa / 2 * PI / 128 + aa / 2 * 90 / 74),128 + 127 * Sin(aa/2 * PI / 128 + aa/2*90 / 63) ,128 - 127 * Cos(aa/2 * PI / 128 + aa/2*90 / 81)
  Circle 300+Cos(angle + i * 90) * ab - ab / 4,300-Sin(angle+i*90)*ab-ab/4,ab/2
  For a=1 To 2
    Color 128 + 127 * Cos(aa * PI / 128 + aa * 90 / 74),128 + 127 * Sin(aa * PI / 128 + aa*90 / 63) ,128 - 127 * Cos(aa * PI / 128 + aa*90 / 81)
    For q=1 To 20
      Circle 300+Cos(angle + i * 90) * ab + Cos(a*180-angle+(q*4))*(ab/6)-((ab/10-q)/2),300-Sin(angle+i*90)*ab-Sin(a*180-angle+(q*4))*(ab/6)-((ab/10-q)/2),ab/10-q
    Next q
  Next a
Next i
DrawScreen
Forever 
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Efektit

Post by nevssons »

Täydellinen sekasorto (muokkasin vähän cbFUN:in esimerkkiä) :

Code: Select all

Include "cbFUN\cbFUN.cb"

Repeat
TextOut (Rand(0,1500), Rand(0,1000 ), Chr(Rand(0,255)))

Forever 
		
Koodarina kohtalainen, henkilönä vittumainen
Image
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Efektit

Post by MaGetzUb »

Joo-o, hienojahan nämä on.. Nyt kun kerrankin sain oman koodini tikulle laitettua niin siirränpä sen koodin tänne.
Eli kyseessähän on yksinkertainen geeninauha, jota voi pyörittää. HUOM! Koodissa ei ole minkäänlaisia kommentointeja, kun olen niin laiska niitä pistämään... ;) :D
GeneticString(x=sivuttaiskoordinaatit,y=pystyttäiskoordinaatit,w= leveys, h=pituus,a# = kulma)

Code: Select all

SCREEN 800,600
w# = 0
a# = 0
reunustukset = 0
Repeat 

If reunustukset Then 
Ellipse 400-80,150-10,80,20
Ellipse 400-80,450-9,80,20
Color 120,120,120


Color 120,120,120
Line 400-80,150,400-80,450
Line 400,150,400,450
EndIf 


Color 0,255,0
GeniticString(400,150,80,300,a)
if KeyHit(57) Then reunustukset = Not reunustukset


a = a + 1
Text 0,0,FPS()
Text 0,15,"Välilyönti "+Chr(34)+"Lasiputki"+Chr(34)+" reunukset on/off"
DrawScreen
Forever 

Function GeniticString(px,py,w,h,a#)
r = getRGB(1) : g = getRGB(2) : b = getRGB(3)
 x = px - w / 2
 y = py

  For I = 1 To h
  Box x-Cos(WrapAngle(a+i))*w/2,y+i-Sin(WrapAngle(a+i))*10,1,1
  Box x+Cos(WrapAngle(a+i))*w/2,y+i+Sin(WrapAngle(a+i))*10,1,1
  Next I

  r2 = r - 60
   If r2 = < 0 Then r2 = 0
   If r2 = > 255 Then r2 = 255
  g2 = g -60
   If g2 = < 0 Then g2 = 0
   If g2 = > 255 Then g2 = 255
  b2 = b - 60
   If b2 = < 0 Then b2 = 0
   If b2 = > 255 Then b2 = 255
   Color r2,g2,b2

  For I = 1 To h
   Box x+1-Cos(WrapAngle(a+i))*w/2,y+i-Sin(WrapAngle(a+i))*10,1,1
   Box x-1-Cos(WrapAngle(a+i))*w/2,y+i-Sin(WrapAngle(a+i))*10,1,1
   Box x-1+Cos(WrapAngle(a+i))*w/2,y+i+Sin(WrapAngle(a+i))*10,1,1
   Box x+1+Cos(WrapAngle(a+i))*w/2,y+i+Sin(WrapAngle(a+i))*10,1,1
  Next I 

  r5 = r - 80
   If r5 = < 0 Then r5 = 0
   If r5 = > 255 Then r5 = 255
  g5 = g - 80
   If g5 = < 0 Then g5 = 0
   If g5 = > 255 Then g5 = 255
  b5 = b - 80
   If b5 = < 0 Then b5 = 0
   If b5 = > 255 Then b5 = 255
  Color r5,g5,b5
 
 For I = 1 To h / 40
 Line  x-Cos(WrapAngle(a+(i*40)))*w/2,y+(i*40)-Sin(WrapAngle(a+(i*40)))*10,x+Cos(WrapAngle(a+(i*40)))*w/2,y+(i*40)+Sin(WrapAngle(a+(i*40)))*10
 Next I
Color r,g,b

EndFunction 
Kommentteja :)
Tätä saa käyttää pelissään kunhan mainitsee vaan minut loppu teksteissä. ;)
EDIT:

Off: No ei tota ylempää olisi tarvinnut mainita. :geek:

Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
KilledWhale
Tech Developer
Tech Developer
Posts: 545
Joined: Sun Aug 26, 2007 2:43 pm
Location: Liminka

Re: Efektit

Post by KilledWhale »

Tässä olisi pieni mustavalkoinen efekti. Jos tuntuu että pätkii liika esineiden määrää ja kokoa voi säätää

Code: Select all

SCREEN 600,600
Const PALLOJA = 3
Const LAATIKOITA = 2
Const MIN_KOKO = 20
Const MAX_KOKO = 40
Const SPD_MIN = 2
Const SPD_MAX = 4
sw=ScreenWidth()
sh=ScreenHeight()
Type p
    Field x#
    Field y#
    Field sx#
    Field sy#
    Field ty
    Field size
EndType
For i=1 To PALLOJA+LAATIKOITA
    pp.p = New(p)
    pp\size = Rand(MIN_KOKO,MAX_KOKO)
    pp\x = Rand(ScreenWidth()-pp\size)
    pp\y = Rand(ScreenHeight()-pp\size)
    angle = Rand(360)
    tmpSPD = Rand(SPD_MIN,SPD_MAX)
    pp\sx = Cos(angle)*tmpSPD
    pp\sy = Sin(angle)*tmpSPD
    If i<=PALLOJA Then pp\ty=1 Else pp\ty=2
Next i
Repeat
angle=WrapAngle(angle+1)
For x=0 To sw/40+1
    For y=0 To sh/40+1
        If (x+y)Mod 2 Then Box x*40+Cos(angle)*20-40,y*40-Sin(angle)*20-40,40,40
    Next y
Next x
Lock //lukitaan näyttö nopeita pikselikomentoja varten
For pp.p = Each p
    pp\x = pp\x + pp\sx //liikutetaan objektia sx ja sy arvojen mukaisesti
    pp\y = pp\y + pp\sy
    If pp\x < 1 Or pp\x > sw-pp\size-1 Then pp\sx = -pp\sx
    If pp\y < 1 Or pp\y > sh-pp\size-1 Then pp\sy = -pp\sy
    For x=pp\x To pp\x + pp\size
        For y=pp\y To pp\y + pp\size
            If GetPixel2(max(Min(x,sw-1),1),max(min(y,sh-1),1)) = -1 Then
                If Distance(x,y,pp\x+pp\size/2,pp\y+pp\size/2)<pp\size/2 Or pp\ty=2 Then PutPixel2 Max(Min(x,sw-1),1),Max(Min(y,sh-1),1),-16777216
            Else
                If Distance(x,y,pp\x+pp\size/2,pp\y+pp\size/2)<pp\size/2 Or pp\ty=2 Then PutPixel2 Max(Min(x,sw-1),1),Max(Min(y,sh-1),1),-1
            EndIf
        Next y
    Next x
Next pp
Unlock
SetWindow Str(FPS())
DrawScreen
Forever 
CoolBasic henkilökuntaa
Kehittäjä

cbFUN Kello
cbSDL
Whale.dy.fi

<@cce> miltäs tuntuu olla suomen paras
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: Efektit

Post by TheDuck »

Tein tälläsen pyörivät pallot-hommelin.

Code: Select all

SCREEN 800,600
a=1
Repeat
    ClsColor cbwhite
    If a<1 Then mode=1
    If a>150 Then mode=0
    If mode Then a+2 Else a-2
    t=Timer()/5
    For i=0 To 3
        Color Rand(0,255),Rand(0,255),Rand(0,255)
        Circle ScreenWidth()/2+Sin(i*90+t)/2*(20+a),ScreenHeight()/2+Cos(i*90+t)*(20+a)/2,a/2,1
        Color cbblack
        Circle ScreenWidth()/2+Sin(i*90+t)*200,ScreenHeight()/2+Cos(i*90+t)*200,50,1
    Next i
    DrawScreen
Forever 
^^
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Efektit

Post by axu »

Tällänen plasman tapainen efekti:
bugittaa jos liikaa plasmaa kasautuu reunaan :( sekä 'voimavirta'jutut ei toimi vielä kunnolla....

Code: Select all

FrameLimit 40
SCREEN 1500,900,0,2
SetWindow "PlasmaEfekti by Axu",3
Type Plasma
    Field X#
    Field Y#
    Field Dir#
    Field Speed#
    Field Typ
EndType
SW=ScreenWidth()
SH=ScreenHeight()
For i=1 To 100
    nP.Plasma=New(Plasma)
    nP\X=Rand(SW)
    nP\Y=Rand(SH)
    nP\Dir=GetAngle(nP\X,nP\Y,MouseX(),MouseY())
    nP\Speed=Distance(nP\X,nP\Y,MouseX(),MouseY())/100
Next i
DIF=1
MouseMode=1
PlasmaAffect=1
DrawStyle=1
Repeat
    mX=MouseX()
    mY=MouseY()
    If MouseMode=0 And MouseHit(1) Then
        i=0
        For iP.Plasma=Each Plasma
            If Distance(mX,mY,iP\X+Cos(iP\Dir)*iP\Speed,iP\Y-Sin(iP\Dir)*iP\Speed)<20 Then i=1:Exit
        Next iP
        If i=0 Then
            nP.Plasma=New(Plasma)
            nP\X=mX
            nP\Y=mY
            nP\Typ=1
        EndIf
    EndIf
    For iP.Plasma=Each Plasma
        If iP\Typ=0 Then
            oX=iP\X:oY=iP\Y
            If oX>SW Or oX<0 Then
                iP\Dir=WrapAngle(-iP\Dir+180)
                Repeat
                    iP\X=CurveValue(SW/2,iP\X,50)
                Until iP\X<SW And iP\X>0
            EndIf
            If oY>SH Or oY<0 Then
                iP\Dir=WrapAngle(-iP\Dir)
                Repeat
                    iP\Y=CurveValue(SH/2,iP\Y,50)
                Until iP\Y<SW And iP\X>0
            EndIf
            If MouseMode Then
                If MouseDown(1) Then
                    iP\Dir=CurveAngle(GetAngle(mX,mY,oX,oY),iP\Dir,Rand(10-DIF,10+DIF))
                Else
                    iP\Dir=CurveAngle(GetAngle(oX,oY,mX,mY),iP\Dir,Rand(10-DIF,10+DIF))
                EndIf
                If MouseDown(2) Then
                    iP\Speed=CurveValue(Distance(oX,oY,mX,mY)/-Rand(10-DIF,10+DIF),iP\Speed,10)
                Else
                    iP\Speed=CurveValue(Distance(oX,oY,mX,mY)/ Rand(10-DIF,10+DIF),iP\Speed,10)
                EndIf
            EndIf
            If PlasmaAffect Then
             '   num=0:FDir=0
                For jP.Plasma=Each Plasma
                    'num+1
                    If Distance(iP\X,iP\Y,jP\X,jP\Y)<300 Then
                        If jP\Typ=0 Then
                           ' FDir+jP\Dir
                            iP\Dir=CurveAngle(jP\Dir,iP\Dir,Distance(oX,oY,jP\X,jP\Y)*Rand(10-DIF,10+DIF)+jP\Speed)
                        Else
                            'FDir=FDir+jP\Dir*10
                           ' num+9
                            iP\Dir=CurveAngle(jP\Dir,iP\Dir,Distance(oX,oY,jP\X,jP\Y)/Rand(10-DIF,10+DIF)+jP\Speed)
                        EndIf
                    EndIf
                Next jP
          '      FDir=FDir/num
           '     iP\Dir=CurveAngle(FDir,iP\Dir,Rand(10-DIF,10+DIF))
            EndIf
            iP\X=iP\X+Cos(iP\Dir)*iP\Speed
            iP\Y=iP\Y-Sin(iP\Dir)*iP\Speed
            Color iP\Speed*10,255-iP\Speed*10,iP\Dir
            If DrawStyle=1 Then
                Line oX,oY,iP\X,iP\Y
            Else
                Circle oX,oY,Abs(iP\Speed)
            EndIf
        Else
            If MouseDown(1) And Distance(mX,mY,iP\X+Cos(iP\Dir)*iP\Speed,iP\Y-Sin(iP\Dir)*iP\Speed)<20 Then
                iP\Dir=GetAngle(iP\X,iP\Y,mX,mY)
                iP\Speed=Distance(iP\X,iP\Y,mX,mY)
            EndIf
            Color 255,255,255
            Line iP\X,iP\Y,iP\X+Cos(iP\Dir)*iP\Speed,iP\Y-Sin(iP\Dir)*iP\Speed
            Circle iP\X+Cos(iP\Dir)*iP\Speed-10,iP\Y-Sin(iP\Dir)*iP\Speed-10,20,0
        EndIf
    Next iP
    Color 255,255,255
    Text 1,1 ,"FPS: "+FPS()
    Text 1,15,"Satunnaisuus: "+DIF+"  Nuolet Y/A vaihtaa"
    If PlasmaAffect Then
        Text 1,30,"Plasma vaikuttaa, Hiiren rulla vaihtaa."
    Else
        Text 1,30,"Plasma ei vaikuta, Hiiren rulla vaihtaa."
    EndIf
    Text SW-TextWidth("Paina SPACE muuttaaksesi hiiren tilaa"),1 ,"Paina SPACE muuttaaksesi hiiren tilaa"
    Text SW-TextWidth("Paina ENTER muuttaaksesi piirtotyyliä"),15,"Paina ENTER muuttaaksesi piirtotyyliä"
    If MouseMode Then
        Text SW-TextWidth("Paina hiiren nappia pohjassa muuttaaksesi hiiren voiman päinvastaiseksi"),30,"Paina hiiren nappia pohjassa muuttaaksesi hiiren voiman päinvastaiseksi"
    Else
        Text SW-TextWidth("Klikkaa ja raahaa luodaksesi voimavirran"),30,"Klikkaa ja raahaa luodaksesi voimavirran"
    EndIf
    DIF=DIF+KeyHit(cbKeyUp)-KeyHit(cbKeyDown)
    MouseMode=(MouseMode+KeyHit(cbKeySpace)) Mod 2
    DrawStyle=(Drawstyle+KeyHit(cbKeyReturn)) Mod 2
    PlasmaAffect=(PlasmaAffect+MouseMoveZ()) Mod 2
    DrawScreen
Forever

Function KeepDistance(x1,y1,x2,y2,dis,mode=0,ret=0)
    angle=GetAngle(x1,y1,x2,y2)
    If mode=>0 And Distance(x1,y1,x2,y2)<dis Then x1=x2-Cos(angle)*dis:y1=y2+Sin(angle)*dis
    If mode=<0 And Distance(x1,y1,x2,y2)>dis Then x1=x2-Cos(angle)*dis:y1=y2+Sin(angle)*dis
    If ret=0 Then
        Return x1
    Else
        Return y1
    EndIf
EndFunction
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Efektit

Post by koodaaja »

Yleisesti plasmaefektin nimellä tunnetaan tämäntapaiset systeemit:

Code: Select all

SCREEN 255,255

Dim pix(256,2)

For x = 0 To 256
    pix(x,0) = Int(128.0 + 128 * Sin(3.1415 * x *0.90 ))
    If pix(x,0)>255 Then pix(x,0) = 255
    If pix(x,0)<0 Then pix(x,0) = 0
    pix(x,1) = Int(128.0 + 128 * Sin(3.1415 * x / 2 *0.90))
    If pix(x,1)>255 Then pix(x,1) = 255
    If pix(x,1)<0 Then pix(x,1) = 0
    pix(x,2) = 0
Next x

kuva = MakeImage(255,255)
Lock Image(kuva)
    For x2 = 0 To 255
        For y2 = 0 To 255
            x = -20 + x2 * 12
            y = -20 + y2 * 40
            aa = 128.0 + (128.0 * Sin(x / 16.0)) + 128.0
            bb = (128.0 * Sin(y / 32.0)) + 128.0
            cc = (128.0 * Sin(Sqrt((x - 255 / 2.0)* (x - 255 / 2.0) + (y - 255 / 2.0) * (y - 255 / 2.0) / 8.0))) + 128.0
            dd = 128.0 * Sin(Sqrt(x * x + y * y) / 8.0)
            Col = (aa+bb+cc+dd)/4
            If col>256 Then col = col - 256
            If col>256 Then col = col - 256
            If col<0 Then col = 0
            Color pix(col,0),pix(col,1),pix(col,2)
            PutPixel x2, y2, pix( col, 2 ) + ( pix( col, 1 ) Shl 8) + ( pix( col,0 ) Shl 16 ) + ( 255 Shl 24 )
        Next y2
    Next x2
Unlock Image(kuva)

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

Re: Efektit

Post by axu »

Totta empäs ajatellutkaan :roll: ajattelin lähinnä sen liikkumistapaa
Voin vaihtaa mutta mikä ois kuvaavampi nimi?
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Efektit

Post by Koodiapina »

axu wrote:mikä ois kuvaavampi nimi?
Säde-efekti?

Tuo koodaajan plasmaefekti on vallan mainio, vaikka vertaisi ammattilaisen tekeleeseen.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Efektit

Post by MaGetzUb »

Grandi wrote:Tuo koodaajan plasmaefekti on vallan mainio, vaikka vertaisi ammattilaisen tekeleeseen.
Eikö koodaaja ole cb ammattilainen? :lol: En minä tuollaisia kuvia saisi muutakuin photoshoppaamalla. :D
Tuo effekti voisi olla jonkinlainen laava effekti...?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: Efektit

Post by Koodiapina »

Pitipä nuo Sin() ja Cos():kin sitten opetella. Tein tämmöisen ihme efektin. Jos tästä tulee mieleen joku Saksalaisten / Suomalaisten / Ruotsalaisten käyttämä logo, näette näkyjä :D

Code: Select all

    SCREEN 800,600

    Type Point
        Field Sd#
        Field Sa#
        Field Sdi
    EndType
    
    For st = 1 To 32
        For ar = 1 To 4
            s.Point = New(Point)
            s\Sd = st
            s\Sa = (ar*90)
            s\Sdi = 1
        Next ar
    Next st
    
    While True
        For s.Point = Each Point
            Color 0,0,200
            PointX = 400+Cos(s\Sa)*s\Sd
            PointY = 300+Sin(s\Sa)*s\Sd
            Circle PointX,PointY,2
            s\Sa = s\Sa + (Float(s\Sd/300)*s\Sdi)
            s\Sd = s\Sd + 1
            If s\Sd >200 Then
                n.Point = New(Point)
                n\Sd = 12
                n\Sa = s\Sa
                n\Sdi = s\Sdi*-1
                Delete s
            EndIf 
        Next s
        DrawScreen 
    Wend 
nevssons
Devoted Member
Posts: 503
Joined: Sun Jan 13, 2008 5:02 pm

Re: Efektit

Post by nevssons »

Pitääpä tämäkin aihe nostaa.

Minäkin opettelin sinit ja cossit

Tässä pieni koodi:

Code: Select all

Repeat
Line 100,150,100-Cos(angle-90)*20,150-Sin(angle-90)*20
Line 100,150,100-Cos(angle+90)*20,150-Sin(angle+90)*20
Line 100-Cos(angle-90)*20,150-Sin(angle-90)*20,100-Cos(angle-90)*20-Cos(angle)*30,150-Sin(angle-90)*20-Sin(angle)*30
Line 100-Cos(angle+90)*20,150-Sin(angle+90)*20,100-Cos(angle+90)*20-Cos(angle-180)*30,150-Sin(angle+90)*20-Sin(angle-180)*30
Line 100-Cos(angle-90)*20-Cos(angle)*30,150-Sin(angle-90)*20-Sin(angle)*30,100-Cos(angle-90)*20-Cos(angle)*30-Cos(angle+90)*40,150-Sin(angle-90)*20-Sin(angle)*30-Sin(angle+90)*40
Line 100-Cos(angle+90)*20-Cos(angle-180)*30,150-Sin(angle+90)*20-Sin(angle-180)*30,100-Cos(angle+90)*20-Cos(angle-180)*30-Cos(angle-90)*40,150-Sin(angle+90)*20-Sin(angle-180)*30-Sin(angle-90)*40
Line 200-Cos(angle)*30,150-Sin(angle)*30,200-Cos(angle)*30-Cos(angle-180)*60,150-Sin(angle)*30-Sin(angle-180)*60
Line 300,150,300-Cos(angle-45)*40,150-Sin(angle-45)*40
Line 300-Cos(angle-45)*40,150-Sin(angle-45)*40,300-Cos(angle-45)*40-Cos(angle-180)*60,150-Sin(angle-45)*40-Sin(angle-180)*60
Line 300,150,300-Cos(angle+135)*40,150-Sin(angle+135)*40
Line 300-Cos(angle+135)*40,150-Sin(angle+135)*40,300-Cos(angle+135)*40-Cos(angle)*60,150-Sin(angle+135)*40-Sin(angle)*60
angle+1
DrawScreen
Forever 
Arvaatko koodia katsomalla mitä se tekee?
Koodarina kohtalainen, henkilönä vittumainen
Image
User avatar
Ruuttu
Devoted Member
Posts: 688
Joined: Thu Aug 30, 2007 5:11 pm
Location: Finland, Sipoo

Re: Efektit

Post by Ruuttu »

Kaikkien aikojen mahtavin epilepsiaefekti:

Code: Select all

SCREEN 800,600,0,0

Shakey = 3
Shakex = 3
MaxFPS = 30
ColorZ = 1
MyText$ = "Type your text here"

Select Rand(1,5)
    Case 1
        thetext$ = "HEADACHE"
    Case 2
        thetext$ = "EPILEPSY"
    Case 3
        thetext$ = "LOL"
    Case 4
        thetext$ = "BLINK"
    Case 5
        thetext$ = "HELLO WORLD!"
End Select

If Len(mytext$) > 0 And (mytext$ = "Type your text here")=0 Then thetext$ = mytext$

If CommandLine() Then thetext$ = CommandLine()

fontsize# = ScreenWidth() / Len(thetext$)

FrameLimit maxFPS
font = LoadFont("arial",fontsize)
SetFont font

Repeat

    Select colorz
        Case 1
            loop + 1 : If loop = 2 Then loop = 0
            If loop = 0 Then r = 0 : g = 0 : b = 0
            If loop = 1 Then r = 255 : g = 255 : b = 255
        Case 2
            loop + 1 : If loop = 3 Then loop = 0
            If loop = 0 Then r = 255 : g = 0 : b = 0
            If loop = 1 Then r = 0 : g = 255 : b = 0
            If loop = 2 Then r = 0 : g = 0 : b = 255
        Case 3
            loop + 1 : If loop = 4 Then loop = 0
            If loop = 0 Then r = 255 : g = 255 : b = 255
            If loop = 1 Then r = 128 : g = 128 : b = 128
            If loop = 2 Then r = 0 : g = 0 : b = 0
            If loop = 3 Then r = 128 : g = 128 : b = 128
        Case 4
            r = Rand(255) : g = Rand(255) : b = Rand(255)
    End Select
    
    ClsColor r,g,b : Color r,g,b
    
    CenterText ScreenWidth()/2+Rand(-ShakeX,ShakeX) + MouseMoveX(),ScreenHeight()/2+Rand(-ShakeY,ShakeY)+MouseMoveY(),thetext$,2

    If KeyHit(cbkeyup) Then maxFPS + 5
    If KeyHit(cbkeydown) Then maxFPS - 5
    maxFPS = maxFPS + (MouseMoveZ() * 2)
    If MouseHit(1) Or KeyHit(cbkeyspace) Then colorz + 1 : loop = 0
    
    If colorz > 4 Then Colorz = 1
    If maxFPS < 10 Then maxFPS = 10
    If maxFPS > 85 Then maxFPS = 85
    
    FrameLimit maxFPS

DrawScreen ON,ON
Forever
Hiiren rullasta tai nuolinäppäimistä voit muuttaa vilkuntanopeutta, hiiren napista tai välilyönnistä väritilaa, ja tekstiä voit muuttaa koodista tai komentorivillä. Jos et laita omaa tekstiä, käytetään satunnaista tekstiä, esim. "Hello World" tai "Epilepsy"
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Efektit

Post by atomimalli »

Tämän olen kasannut vähitellen ja julkaissut offtopicissa pari viikkoa(4-8) sitten
Innostus lähti Joxin intron alkuefektin jäljittelystä, lähestyin kumminkin asiaa eri kantilta: kaikki generoidaan lennossa, taulukoita, kuvia ja tyyppejä ei käytetä.
Homman tekee mielenkiintoiseksi se että miten tähän nyt saadaan vaihtelua, mutta kumminkin niin ettei kaikki vaihdu joka framella. Randomize on oiva kaveri.
Pitemmittä puheitta, on siinä muutakin kuin Joxin efekti:
Koodia 54 riviä.

Code: Select all

SCREEN 400,300,0,0
Global aika
alku=Timer()
Repeat
    aika=Timer()-alku
    For i=1 To 30
        pituus#=Abs((1+Sin(aika/50-90))*8000*Abs(Cos(i*12343))*0.1*(1+Sin(aika/10+i*15)/3))
        Color 0,0,255*(1+Sin(aika/5+i*15)/5)/1.2*(Sin(aika/800.0*90+90)+1)/3'*Max(0.5,1-aika/50000.0)
        Line i*20,0,i*20,pituus
    Next i
    Color 130,130,130
    For i=0 To 10
        Randomize Int(aika-Cos(i*1389679)*1389697934)/2000
        Box Rand(400)+Sin(aika/Rand(20,100))*Rand(60),Rand(300),2,2
    Next i
    Randomize aika/3200
    For i=0 To 10
        k=50*Sin(aika/800.0*90-Rand(100)-50)
        Color 0,0,Sin(aika/800.0*90-Rand(50))*90+90
        Box Rand(100,300)-k/2,Rand(90,290)-k/2,k,k
    Next i
    kohta=(aika/4.0 Mod 800 -400)*2+200+Sin(aika/800.0*90)*250
    ripale(kohta ,270,8, aika/3200+2, 270, 30)
    Color 110,70,70
    Box kohta-15, 270,30,5
    Color 100,70,70
    Box kohta-12,275,24,10
    Box kohta-11,285,22,11
    Color 120,120,120
    Box 0,296,400,4
    Color 70,70,70
    For i=1 To 20
        Box kohta Mod 20+ i*20,296,2,4
    Next i
    SetWindow ""+FPS()
    DrawScreen
Forever
Function ripale(x,y, itera, seed, kulma#,pituus#)
    kv#=Max(0,Sin(aika/800.0*90-180))
    vk#=1-kv#
    Randomize seed
    k#=kulma+Rnd(-30,30)+Sin(aika/800.0*90-45)*6.0
    x2=x+Cos(k)*pituus
    y2=y+Sin(k)*pituus
    Color 120*vk+220*kv,120*vk+170*kv,120*vk+10*kv
    Line x,y,x2,y2
    If itera Then 
        ripale(x2,y2,itera-1,Rand(100000000), k,pituus*0.9)
        If Rand(13) Then ripale(x2,y2,itera-1,Rand(100000000), k+Rnd(-90,90),pituus*0.5)
    Else
        Color 90*vk+20*kv,90*vk+100*kv,90*vk+10*kv
        Box x2-2,y2-2,4,4
    EndIf
EndFunction
Eri koodinpätkien tarkoitus selvinnee kommentoimalla pätkän pois.
User avatar
Ilmuri
Developer
Developer
Posts: 277
Joined: Sun Aug 26, 2007 2:46 pm
Location: \o

Re: Efektit

Post by Ilmuri »

Code: Select all

SCREEN 200,200

kuva = LoadImage("media/tatti.bmp") 'ihan hanurista nää mediat, täähän on ainoa hyvä!
ResizeImage kuva, 85,80

w = ImageWidth(kuva)/2
h = ImageHeight(kuva)/2

Const PX = 1
Const PY = 2
Const PDX = 3
Const PDY = 4
Dim part(w,h,4) As Float

For y = 0 To h
	For x = 0 To w
		part(x,y,PX) = x+Rnd(-1,1) 'tottahan toki me halutetaan sekottaa nämä ensin
		part(x,y,PY) = y+Rnd(-1,1)
		part(x,y,PDX) = Rnd(-1,1) 
		part(x,y,PDY) = Rnd(-1,1)
	Next x
Next y

Repeat
	If MouseDown(1) Xor MouseDown(2) Then
		mx# = (MouseX()-50)/2
		my# = (MouseY()-50)/2
		sgn = MouseDown(1)-MouseDown(2) 'jotta vasen näppäin työntää ja oikea imee :|
		For y = 0 To h
			For x = 0 To w
				d# = max(Distance(mx,my,part(x,y,PX),part(x,y,PY)),1)*50.0*sgn
				part(x,y,PDX) = part(x,y,PDX)-(mx-part(x,y,PX))/d 'kiihdytys poispäin hiirestä
				part(x,y,PDY) = part(x,y,PDY)-(my-part(x,y,PY))/d 
			Next x
		Next y
	EndIf
	For y = 0 To h
		For x = 0 To w
			part(x,y,PDX) = part(x,y,PDX)*0.95+(x-part(x,y,PX))*0.01 'kitka, kiihtyvyys kohti alkuperäistä pistettä
			part(x,y,PDY) = part(x,y,PDY)*0.95+(y-part(x,y,PY))*0.01 'vakiot luonnollisesti maagisia, yritys ja erehdys
			part(x,y,PX) = part(x,y,PX)+part(x,y,PDX)
			part(x,y,PY) = part(x,y,PY)+part(x,y,PDY)
			DrawImageBox kuva, part(x,y,PX)*2+50, part(x,y,PY)*2+50, x*2, y*2, 2, 2 '2x2-palikoita ihan vaan siksi että cb ei jaksais pyörittää nelinkertasta määrää :|
		Next x
	Next y
	DrawScreen
	SetWindow Str(FPS())
Forever
Supermegakuul tai jotain.
CoolBasic henkilökuntaa
Kehittäjä
CoolBasic Classic
Post Reply