Efektit

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
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 »

Requiem for Anthrax wrote:tälläisen hirvityksen väkertelin näytönsäästäjäksi.

Code: Select all

SCREEN 1920,1080,32,0
DrawToWorld ON
Randomize
c=Rand(2,8)
d=Rand(1,7)
t=Rand(1,4)
Repeat
For x=0 To 360
    If d=1 Then Color x*c,0,0
    If d=2 Then Color 0,x*c,0
    If d=3 Then Color 0,0,x*c
    
    If d=4 Then Color x*c,x*c,0
    If d=5 Then Color 0,x*c,x*c
    If d=6 Then Color x*c,0,x*c
    If d=7 Then Color x*c,x*c,x*c
    
    If t=1 Then Line Cos(x)*481,Sin(x)*481,Cos(x*p)*381,Sin(x*p)*381
    If t=2 Then Line Cos(x)*481,Sin(x)*481,Cos(x*Sqrt(p))*381,Sin(x*Sqrt(p))*381
    If t=3 Then Line Cos(x)*481,Sin(x)*481,Cos(x*Log(p))*381,Sin(x*Log(p))*381
    If t=4 Then Line Cos(x)*481,Sin(x)*481,Cos(x*Log10(p))*381,Sin(x*Log10(p))*381
Next x
p+1
If p=720 Then
    c=Rand(2,8)
    d=Rand(1,7)
    t=Rand(1,4)
    p=0
EndIf
DrawScreen
Forever
Ensinnäkin kaikilla ei ole 1920x1080 reso (toki mulla kyllä on) ja toiseksi, pelkkä Randomize heittää erroria... Korjaantu muuttamalla Randomize Timer().

Mutta ihan hienohan tuo oli.
^^
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Efektit

Post by Awaclus »

Kaikilla ei ole myöskään 1280x1024 reso, niin kuin ei mullakaan ole. Mutta joops, näytönsäästäjäksi meni!
DatsuniG
Advanced Member
Posts: 367
Joined: Fri Aug 15, 2008 9:57 pm

Re: Efektit

Post by DatsuniG »

Mustaa ja valkoista

Code: Select all

SCREEN 800, 600
Repeat
    For a = 0 To 30
        For i = 0 To 40
            Color 255 * Abs(Sin((Timer() + i * a) Mod 360)), 255 * Abs(Sin((Timer() + i * a) Mod 360)), 255 * Abs(Sin((Timer() + i * a) Mod 360))
            Box i * 20, a * 20, 20, 20
        Next i
    Next a
    DrawScreen
Forever 
ja värillisenä:

Code: Select all

    SCREEN 800, 600
    scrnw = ScreenWidth()
    scrnh = ScreenHeight()
    size = 20
    Repeat
        For a = 0 To scrnh / size
            For i = 0 To scrnw / size
                Color 122.5 + 122.5 * Sin((Timer() + i * a) Mod 360), 122.5 + 122.5 * Sin((Timer() + i * a + i) Mod 360), 122.5 + 122.5 * Sin((Timer() + i * a + a) Mod 360)
                Box i * size, a * size, size, size
            Next i
        Next a
        DrawScreen
    Forever 
Hengität nyt manuaalisesti.
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Efektit

Post by Knoy »

Duunasin tuossa jtn randomia ja tälläinen syntyi...

En siis yrittänyt tehdä yhtään mitään järkevää...
Laitoin vain komentoja peräkkäin miten sattui...

Code: Select all

iii As Float = 0
Angle As Float = 0

For kuva = 0 To 10
    Color Rand(0,255),Rand(0,255),Rand(0,255)
    For i = iii To iii+15
        For ii = iii To iii+15
            Dot ScreenWidth()/2+Cos(WrapAngle(Angle+i))*ii,ScreenHeight()/2-Sin(WrapAngle(Angle+ii))*i
            If Angle>359=0 Then Angle+0.01: iii=WrapAngle(iii+0.1) Else Angle=0
        Next ii
    Next i
Next kuva
DrawScreen
WaitKey 
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

Knoy wrote:Duunasin tuossa jtn randomia ja tälläinen syntyi...

En siis yrittänyt tehdä yhtään mitään järkevää...
Laitoin vain komentoja peräkkäin miten sattui...

Code: Select all

Koodia...
Onpahan vaan komea vahinko :D
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Efektit

Post by CCE »

Knoy wrote: - En siis yrittänyt tehdä yhtään mitään järkevää...
Laitoin vain komentoja peräkkäin miten sattui... -
Tervetuloa efektikoodauksen pariin :D
Otin vapauden tehdä konfettinauhastasi psykedeelisemmän, animoidun version:

Code: Select all

iii As Float = 0
Angle As Float = 0
Repeat
angle = WrapAngle(angle + 3)
Lock 
For kuva = 0 To 10
	piks = Rand(0, 16581375 )
    For i = iii To iii+15
        For ii = iii To iii+15
		PutPixel2 Min(399,Max(0, 200+Cos(WrapAngle(Angle+i))*ii)),min(299,Max(0,150-Sin(WrapAngle(Angle+ii))*i)), piks
            If Angle>359=0 Then Angle+0.01: iii=WrapAngle(iii+0.1) Else Angle=0
        Next ii
    Next i
Next kuva
Unlock
DrawScreen
Forever
WaitKey
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Efektit

Post by Knoy »

Lisää vahinkoa on tapahtunut...
Tälläkertää värkkäsin hieman eri versioita jotka nekin sitten tulivat hieman omituisiksi...

Code: Select all

Const ScreenW = 800
Const ScreenH = 600

SCREEN ScreenW,ScreenH

Top:

Size As Float = ((ScreenH/300+ScreenW/400)/2)*2

Repeat
    Angle=WrapAngle(Angle+1)
    For i = 0 To 10
        For ii = 0 To 10
            For iii = 0 To 10
                Color i*25,ii*25,iii*25
                Dot ScreenW/2+Cos(WrapAngle(Angle+iii*36+ii))*((i+ii+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+ii*36+i))*((i+ii+iii)*Size)
            Next iii
        Next ii
    Next i
    DrawScreen
Until GetKey() 

Size As Float = ((ScreenH/300+ScreenW/400)/2)*1.5

Repeat
    Angle=WrapAngle(Angle+1)
    For i = 0 To 10
        For ii = 0 To 10
            For iii = 0 To 10
                Color i*25,ii*25,iii*25
                Line ScreenW/2+Cos(WrapAngle(Angle+iii*36+ii))*((i+ii+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+ii*36+i))*((i+ii+iii)*Size),ScreenW/2+Cos(WrapAngle(i+Angle+iii*36+ii))*((i+ii+iii)*(Size+0.35)),ScreenH/2-Sin(WrapAngle(iii+Angle+ii*36+i))*((i+ii+iii)*(Size+0.35))
            Next iii
        Next ii
    Next i
    DrawScreen
Until GetKey()


Size As Float = ((ScreenH/300+ScreenW/400)/2)*5

Repeat
    Angle=WrapAngle(Angle+1)
    For i = 0 To 10
        For ii = 0 To 10
            For iii = 0 To 10
                Color i*25,ii*25,iii*25
                Line ScreenW/2+Cos(WrapAngle(Angle+iii*36+ii))*((i+ii+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+ii*36+i))*((i+ii+iii)*Size),ScreenW/2+Cos(WrapAngle(Angle+iii*36+(ii+1)))*((i+(ii+1)+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+(ii+1)*36+i))*((i+(ii+1)+iii)*Size)
            Next iii
        Next ii
    Next i
    DrawScreen
Until GetKey()

Size As Float = ((ScreenH/300+ScreenW/400)/2)*5

Repeat
    Angle=WrapAngle(Angle+1)
    For i = 0 To 51
        For ii = 0 To 2
            For iii = 0 To 10
                Color i*5,ii*125,iii*25
                Line ScreenW/2+Cos(WrapAngle(Angle+iii*36+ii))*((i+ii+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+ii*36+i))*((i+ii+iii)*Size),ScreenW/2+Cos(WrapAngle(Angle+iii*36+(ii+1)))*((i+(ii+1)+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+(ii+1)*36+i))*((i+(ii+1)+iii)*Size)
            Next iii
        Next ii
    Next i
    DrawScreen
Until GetKey()

Size As Float = ((ScreenH/300+ScreenW/400)/2)*5

Repeat
    Angle=WrapAngle(Angle+1)
    For i = 0 To 10
        For ii = 0 To 10
            For iii = 0 To 10
                Color i*25,ii*25,iii*25
                Line ScreenW/2+Cos(WrapAngle(Angle+iii*36+ii))*((i+ii+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+ii*36+i))*((i+ii+iii)*Size),ScreenW/2+Cos(WrapAngle(Angle+(iii+1)*36+(ii+(Size/2.5))))*(((i+(Size/2.5))+(ii+(Size/2.5))+(iii+(Size/2.5)))*Size),ScreenH/2-Sin(WrapAngle(Angle+(ii+1)*36+(i+1)))*(((i+(Size/2.5))+(ii+(Size/2.5))+(iii+(Size/2.5)))*Size)
            Next iii
        Next ii
    Next i
    DrawScreen
Until GetKey()

Size As Float = ((ScreenH/300+ScreenW/400)/2)*2

Repeat
    Angle=WrapAngle(Angle+1)
    For i = 0 To 51
        For ii = 0 To 2
            For iii = 0 To 2
                Color i*5,ii*125,iii*125
                Line ScreenW/2+Cos(WrapAngle(Angle+iii*36+ii))*((i+ii+iii)*Size),ScreenH/2-Sin(WrapAngle(Angle+ii*36+i))*((i+ii+iii)*Size),ScreenW/2+Cos(WrapAngle(Angle+(iii+1)*36+(ii+(Size/2.5))))*(((i+(Size/2.5))+(ii+(Size/2.5))+(iii+(Size/2.5)))*Size),ScreenH/2-Sin(WrapAngle(Angle+(ii+1)*36+(i+1)))*(((i+(Size/2.5))+(ii+(Size/2.5))+(iii+(Size/2.5)))*Size)
            Next iii
        Next ii
    Next i
    DrawScreen
Until GetKey()

Goto Top
Edit: Lisäsin 2 effektiä.
Edit2:Yhdessä osassa oli pieni bugi.
Last edited by Knoy on Wed Apr 07, 2010 7:21 pm, edited 2 times in total.
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Efektit

Post by Viltzu »

Knoy wrote:Lisää vahinkoa on tapahtunut...
Tälläkertää värkkäsin hieman eri versioita jotka nekin sitten tulivat hieman omituisiksi...
Tuohon on jo melko hieno. Well done.
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Efektit

Post by MrMonday »

Knoy wrote:Lisää vahinkoa on tapahtunut...
Tälläkertää värkkäsin hieman eri versioita jotka nekin sitten tulivat hieman omituisiksi...
No huhhuh, on kyllä näppärä :o
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Efektit

Post by Knoy »

Taas tein väänsin jotain pientä...

Tämän lataamisessa saattaa kestää hetki...

Code: Select all

i As Float = 0
ii As Float = 0
iii As Float = 0

Const ScreenW = 400
Const ScreenH = 300

SCREEN ScreenW,ScreenH

    For i = 0 To ScreenW
        For ii = 0 To ScreenH
            For iii = -5 To 5
                Color i/ScreenW*255,Abs(iii)*50,ii/ScreenH*255
                Dot ScreenW/2+Cos(i/ScreenW*360)*(iii*15),ScreenH/2-Sin(i/ScreenH*360)*(iii*15) 
            Next iii
        Next ii
    Next i
    DrawScreen
WaitKey 
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Efektit

Post by legend »

Knoy wrote:Taas tein väänsin jotain pientä...

Tämän lataamisessa saattaa kestää hetki...

Code: Select all

i As Float = 0
ii As Float = 0
iii As Float = 0

Const ScreenW = 400
Const ScreenH = 300

SCREEN ScreenW,ScreenH

    For i = 0 To ScreenW
        For ii = 0 To ScreenH
            For iii = -5 To 5
                Color i/ScreenW*255,Abs(iii)*50,ii/ScreenH*255
                Dot ScreenW/2+Cos(i/ScreenW*360)*(iii*15),ScreenH/2-Sin(i/ScreenH*360)*(iii*15) 
            Next iii
        Next ii
    Next i
    DrawScreen
WaitKey 
Älä ny innostu ;)
Itse en tajua tota?
Attachments
Sieppaa.JPG
Sieppaa.JPG (8.33 KiB) Viewed 11745 times
Last edited by legend on Thu Apr 08, 2010 5:44 pm, edited 1 time in total.
User avatar
kaneli2000
Guru
Posts: 1059
Joined: Mon Mar 17, 2008 2:40 pm
Location: Lempäälä

Re: Efektit

Post by kaneli2000 »

legend wrote:
Knoy wrote:Taas tein väänsin jotain pientä...

Tämän lataamisessa saattaa kestää hetki...

Code: Select all

i As Float = 0
ii As Float = 0
iii As Float = 0

Const ScreenW = 400
Const ScreenH = 300

SCREEN ScreenW,ScreenH

    For i = 0 To ScreenW
        For ii = 0 To ScreenH
            For iii = -5 To 5
                Color i/ScreenW*255,Abs(iii)*50,ii/ScreenH*255
                Dot ScreenW/2+Cos(i/ScreenW*360)*(iii*15),ScreenH/2-Sin(i/ScreenH*360)*(iii*15) 
            Next iii
        Next ii
    Next i
    DrawScreen
WaitKey 
Älä ny innostu ;)
Itse en tajua tota?
Odotteleppa hetki, niin paljastuu hitusen hienompi efekti.
I see the rainbow rising
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Efektit

Post by Knoy »

@legend: Tuossa saattaa huonolla koneella mennä todellakauan... itselläni menee miltei minuutti sen kokonaan tekemiseen. Tuo minkä näät on vain osa effektitstä...

Edit:Se, että siinä menee kauan johtuu näköjään siitä, että tein effektin aivan liian randomisti...
Tässä on korjattu effekti.

Code: Select all

i As Float = 0
iii As Float = 0

Const ScreenW = 400
Const ScreenH = 300

SCREEN ScreenW,ScreenH

    For i = 0 To ScreenW
            For iii = -5 To 5
                Color i/ScreenW*255,Abs(iii)*50,ii/ScreenH*255
                Dot ScreenW/2+Cos(i/ScreenW*360)*(iii*15),ScreenH/2-Sin(i/ScreenH*360)*(iii*15) 
            Next iii
    Next i
    DrawScreen
WaitKey
Edit2: Tein vielä hieman paremman version linellä.

Code: Select all

i As Float = 0
iii As Float = 0

Const ScreenW = 400
Const ScreenH = 300

SCREEN ScreenW,ScreenH

    For i = 0 To ScreenW
            For iii = -9 To 9
                Color 0,Abs(iii)*25,i/ScreenW*255
                Line ScreenW/2+Cos(i/ScreenW*360)*(iii*15),ScreenH/2-Sin(i/ScreenH*360)*(iii*15) ,ScreenW/2+Cos(i/ScreenW*360+1)*((iii)*15),ScreenH/2-Sin(i/ScreenH*360+1)*((iii)*15) 
            Next iii
    Next i
    DrawScreen
WaitKey 

__________________________________________________

Tein taas vahingossa jotain järejetöntä...
Tämä effekti muuttaa muotoaan omituisesti...

Code: Select all

Const ScreenW = 400
Const ScreenH = 300

Angle As Float = 0

ii As Float = 0
iii As Float = 0

SCREEN ScreenW,ScreenH

Repeat
    Angle=WrapAngle(Angle+0.1)
    Angle2=WrapAngle(Angle2+1)
    For i = 1 To 15 As Float
        For ii = 1 To 15 As Float
            Color ii*17,((i+ii)/2)*17,i*17
            Line ScreenW/2+Cos(WrapAngle(Angle2+(1+i+ii)*Angle))*(15+i+ii),ScreenH/2-Sin(WrapAngle(Angle2+(1+i+ii)*Angle))*(15+i+ii),ScreenW/2+Cos(WrapAngle(Angle2+(i+ii+2)*Angle))*(16+i+ii),ScreenH/2-Sin(WrapAngle(Angle2+(i+ii+2)*Angle))*(16+i+ii)
        Next ii
    Next i
    DrawScreen
Forever 
Edit3: Liite tiedosto siitä miktä effektin pitäisi näyttää... Siis ensimmäisen.
Attachments
Tällänen.jpg
Tällänen.jpg (9.37 KiB) Viewed 11724 times
Last edited by Knoy on Thu Apr 08, 2010 6:06 pm, edited 1 time in total.
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Efektit

Post by legend »

Sori offtopic, mutta itse en tajua mitä hienoa siinä oli, kun tein 10 kertaa
(Huom. Itselläni siinä ei kestä ollenkaan, noin 1 s) Siinä ei tapahtunut miitän uutta, aina sama?

Vähän toi pyörivä efekti oli hieno, nyt oli laadukasta työtä =)
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Efektit

Post by Viltzu »

legend wrote:Sori offtopic, mutta itse en tajua mitä hienoa siinä oli, kun tein 10 kertaa
(Huom. Itselläni siinä ei kestä ollenkaan, noin 1 s) Siinä ei tapahtunut miitän uutta, aina sama?

Vähän toi pyörivä efekti oli hieno, nyt oli laadukasta työtä =)
efekti.PNG
efekti.PNG (6.63 KiB) Viewed 11725 times
Tuolta sen pitäisi näyttää, jos et näe kuviota, et odottanut tarpeeksi kauan. Se vain päivittyy välillä, jos esimerkiksi siirrät sitä ikkunaa. (Ilmeisesti se heti alussa päivittyy jostain syystä.)

Mutta hienoja efektejä Knoylta.
EDIT:

Oho, Knoy itsekkin oli jo laittanut kuvan siitä. :E (Uudemmasta versiosta tosin)

Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman »

Knoy wrote:...kolmas efekti...
voihan jumalan pyssy, niinkuin joissain JIMin ohjelmissa suomennettu on... siis tuo vain pyörii ja muuttaa muotiaan, mutta silti onnistuu olemaan hieno :o
- - - -
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Efektit

Post by Knoy »

Katselin viikonloppuna kun kaveri pelaili Redalert 3 ja halusin tehdä jonkinnäköisen sähkö effektin.
Ei tämä hieno ole, mutta kelvollinen.

Vie hiiri sisään Ympyrään ja tolppien keskeltä tulee sähköä hiirtäpäin.

Code: Select all

Const ScreenW = 600
Const ScreenH = 450

SCREEN ScreenW,ScreenH

Repeat
    Color CbDark
    Line ScreenW/2-30,ScreenH/2,ScreenW/2,ScreenH/2-120
    Line ScreenW/2,ScreenH/2-120,ScreenW/2+30,ScreenH/2
    Angle=GetAngle(ScreenW/2,ScreenH/2-120,MouseX(),ScreenH/2-MouseY())
    Color CbBlue: Circle ScreenW/2-100,ScreenH/2-220,200,0
    If Distance(ScreenW/2,ScreenH/2-120,MouseX(),MouseY())<100 Then Sähkö(ScreenW/2,ScreenH/2-120,Angle,4,2,20)
    DrawScreen
Forever 

Function Sähkö(X As Float,Y As Float,A As Float,M1 As Float,M2 As Float,S As Float)
    For i = 1 To M2 As Float
        //Määrittää arvoja
        R1=Rand(-45,45): R2=Rand(-45,45): R3=Rand(S-3,S+3)
        //Turhaa väriarvo säätöä
        C=Rand(1,4)
        If C=1 Then Color CbBlue
        If C=2 Then Color CbLightBlue
        If C=3 Then Color CbDarkBlue
        If C=4 Then Color CbWhite
        //Piirtää linjat
        Line X,Y,X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3
        //Kutsuu itsensä jos M1 ei ole liikapieni
        If M1>0 Then Sähkö(X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3,A,M1-1,M2,S)
    Next i
EndFunction 
EDIT:

Hieman editoitu versio...

Code: Select all

Const ScreenW = 600
Const ScreenH = 450

SCREEN ScreenW,ScreenH

Repeat
    Color CbDark
    Line ScreenW/2-30,ScreenH/2,ScreenW/2,ScreenH/2-120
    Line ScreenW/2,ScreenH/2-120,ScreenW/2+30,ScreenH/2
    Angle=GetAngle(ScreenW/2,ScreenH/2-120,MouseX(),ScreenH/2-MouseY())
    Color CbBlue: Circle ScreenW/2-100,ScreenH/2-220,200,0
    If Distance(ScreenW/2,ScreenH/2-120,MouseX(),MouseY())<100 Then Sähkö(ScreenW/2,ScreenH/2-120,Angle,10,2,10)
    DrawScreen
Forever 

Function Sähkö(X As Float,Y As Float,A As Float,M1 As Float,M2 As Float,S As Float)
    For i = 1 To M2 As Float
        //Määrittää arvoja
        R1=Rand(-45,45): R2=Rand(-45,45): R3=Rand(S-3,S+3)
        //Turhaa väriarvo säätöä
        C=Rand(1,4)
        If C=1 Then Color CbBlue
        If C=2 Then Color CbLightBlue
        If C=3 Then Color CbDarkBlue
        If C=4 Then Color CbWhite
        //Piirtää linjat
        Line X,Y,X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3
        //Kutsuu itsensä jos M1 ei ole liikapieni
        R4=Rand(0,1)
        If R4= 0 And M1>0 Then Sähkö(X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3,A,M1-1,M2,S)
    Next i
EndFunction 
EDIT:

Duunasin tähän nyt maksimi pituuden tähän sähköön.

Code: Select all

Const ScreenW = 600
Const ScreenH = 450

Global Äks
Global YY
Äks=ScreenW/2
Yy=ScreenH/2-120

SCREEN ScreenW,ScreenH

Repeat
    Color CbDark
    Line ScreenW/2-30,ScreenH/2,ScreenW/2,ScreenH/2-120
    Line ScreenW/2,ScreenH/2-120,ScreenW/2+30,ScreenH/2
    Angle=GetAngle(ScreenW/2,ScreenH/2-120,MouseX(),ScreenH/2-10-MouseY())
    Color CbBlue: Circle ScreenW/2-100,ScreenH/2-220,200,0
    If Distance(ScreenW/2,ScreenH/2-120,MouseX(),MouseY())<100 Then Sähkö(ScreenW/2,ScreenH/2-120,Angle,6,2,15,100)
    DrawScreen
Forever 

Function Sähkö(X# ,Y# ,A# ,M1# ,M2# ,S# ,D#)
    For i = 1 To M2#
        //Määrittää arvoja
        R1=Rand(-45,45): R2=Rand(-45,45): R3=Rand(S-3,S+3)
        //Turhaa väriarvo säätöä
        C=Rand(1,4)
        If C=1 Then Color CbBlue
        If C=2 Then Color CbLightBlue
        If C=3 Then Color CbDarkBlue
        If C=4 Then Color CbWhite
        //Piirtää linjat
        If Distance(X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3,Äks,Yy)<D Then Line X,Y,X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3
        //Kutsuu itsensä jos M1 ei ole liikapieni
        R4=Rand(0,1)
        If R4= 0 And M1>0 And Distance(X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3,Äks,Yy)<D Then Sähkö(X+Cos(WrapAngle(A+R1))*R3,Y+Sin(WrapAngle(A+R2))*R3,A,M1-1,M2,S,D)
    Next i
EndFunction
Last edited by Knoy on Fri Apr 09, 2010 8:48 pm, edited 1 time in total.
Jonhu
Active Member
Posts: 186
Joined: Mon Aug 04, 2008 5:45 pm

Re: Efektit

Post by Jonhu »

Knoy wrote:Katselin viikonloppuna kun kaveri pelaili Redalert 3 ja halusin tehdä jonkinnäköisen sähkö effektin.
Ei tämä hieno ole, mutta kelvollinen.
Hienoa, kun siirryit randomi tekeleistä suunniteltuun tekemiseen, mutta kyllä nuo vahingossa syntyneetkin kuviot olivat ihan hienoja. Rivien pituus kyllä vähän häiritsi minua niissä. Minä suosittelisin välimuuttujien käyttöä, jos rivin pituus alkaa lähestyä ruudun reunaa.. Huomattavasti helpompi lukea koodia välimuuttujilla ja kääntäjä (kai) osaa optimoida nämä pois esikäännössä.

Tuohon sähköefektiin voisit lisätä ehdon, ettei sähkökipinä tule kuvusta ulos, eli pisteen etäisyys ei saa olla ympyrän sädettä suurempi. Lisäksi selectin käyttö olisi suositeltavaa tuossa värien muuttamisessa. Muuten tuo on aika hyvä ja simppeli esimerkki rekursiosta.

(Jos vielä viilataan kirjoitusasua, niin "x As Float" on sama kuin "x#" ja pilkun ja uuden muuttujan väliin jätetään yleensä väli, mutta nämä seikat alkavat olla jo jokaisen koodarin omia mielipiteitä koodin siisteydestä. )
Tekeillä pikkupelejä ja ohjelmia :)
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Efektit

Post by Wingman »

Knoy wrote:...taas hienoja efektejä...
sähän suollat efektiä 3e/pv nopeudella, ja hienoa jälkeä jälleen... tohon sähköön voisi lisätä vielä niin, että se osuu hiireen, eikä mene sen ohi... muuten aivan hervottoman hienoa. Keep Up the good work ;)
- - - -
User avatar
Knoy
Active Member
Posts: 187
Joined: Fri Feb 12, 2010 10:50 pm

Re: Efektit

Post by Knoy »

Juuh kiitos näistä palautteista.

@Jonhu: Hyvä ideo tuo Sähköön maximi distancen säätö. Toteutin sen heti.
@Wingman: Jos Sähkö(ScreenW/2,ScreenH/2-120,Angle,10,2,6,100) olisi tuollainen laita se vaan näin.
Sähkö(ScreenW/2,ScreenH/2-120,Angle,Distance(ScreenW/2,ScreenH/2-120,MouseX(),MouseY())/6,2,6,100)
Jaat vain tuon distancen tuollalailla.

Edit: Noniin tein taas effektiä. Alkuun ei ollut hommassa taaskaan mitään järkeä, mutta sitten tein vahingossa kuvaa sotkevan systeemin...
Rupesin sitä sitten hieman editoimaan ja tuli pari funktiota väännettyä.

Ihan toimiva effekti. Hieman hidas tosin.

Code: Select all

Const ScreenW = 500
Const ScreenH = 350

SCREEN ScreenW,ScreenH

kuva = MakeImage(500,350)

DrawToImage Kuva
For i = 0 To 400
Color Rand(55,255),Rand(55,255),Rand(55,255)
Box Rand(-50,450),Rand(-50,300),Rand(25,55),Rand(25,55),1
Next i
DrawToScreen


Repeat
    DrawImage Kuva,0,0
    If MouseHit(1) Then X=MouseX(): Y=MouseY(): Valmis=1
    If MouseDown(1) Then
        Size=Distance(X,Y,MouseX(),MouseY())
        Color CbWhite
        Line X,Y,MouseX(),MouseY()
        Circle X-Size,Y-Size,Size*2,0
        Valmis=2
    EndIf
    If MouseUp(1) And Valmis=2 Then Valmis=3
    If Valmis=3 Then
        DrawToImage Kuva
        DrawImage Kuva,0,0
        Kohina(X,Y,Size)
        DrawToScreen
        Valmis=0
    EndIf
    DrawScreen
Forever 

Function Kohina(X,Y,Size)
    Lock
    For Angle1# = 0 To 359
        For iii = 0 To Size As Float
            Pixel=GetPixel2(MValue(x+Cos(WrapAngle(Angle1#+(i+ii+Rand(-1,1))))*((Rand(-1,1)+iii)),0,ScreenWidth()),MValue(y-Sin(WrapAngle(Angle1#+(i+ii+Rand(-1,1))))*((Rand(-1,1)+iii)),0,ScreenHeight()))
            PutPixel2 MValue(x+Cos(WrapAngle(Angle1#+(i+ii)))*(iii),0,ScreenWidth()),MValue(y-Sin(WrapAngle(Angle1#+(i+ii)))*(iii),0,ScreenHeight()),Pixel
        Next iii
    Next Angle1#
    Unlock
EndFunction
    
Function MValue(I ,Mi ,Ma)
    If I<Mi Then I=Mi
    If I>Ma Then I=Ma
    Return I
EndFunction 
Edit2: Ainiin jos joku ei jaksa lukea koodia. Effekti toimii näin:
1. Paina hiiren vasen nappi pohjaan.
2. Vedä hiirtä ja päästä nappi vapaaksi.
3. Kohinatulee ympyränsisälle.

Edit3: Nimi on kohina ihan vaan koska se on hieman kohinan kaltainen. Ei toimi aivan samallatavalla kuin photarin tai gimpin kohina...
Post Reply