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