Totuus on, että kunnolliseen salama-efektiin tarvitset piirtokomentoja, todennäköisesti line-komentoa, eivätkä nämä ole cb:ssä ikinä häikäisseet nopeudellaan.
Mutta... Jos pidät sähkötyksen pienissä lukemissa, voit saada sen toimivaan normaaleilla nopeuksilla. Tein pikaisen sähkötys-funktion, jolla voi sähkötellä vain tietynlaisia tolppia (itse funktio ei ole näihin rajattu, mutta funktion käyttö koodissa on). Sähkö luodaan seuraavien tietojen avulla:
SÄHKÖ_PITUUS: kertoo kuinka pitkälle voi sähköttää. Huomaa: mitä pidempi, sitä suuremmalla todennäköisyydellä sähkötetään useampia kappaleita, ja peli voi hidastua.
KULMA_MUUTOS: kuinka suuria kulma-muutoksia sähkö voi tehdä. Suuremmat lukemat voivat näyttää aidommilta, mutta ne pistävät sähkön kulkemaan hieman pidempiä matkoja, joka johtaa useampaan line-komentoon -> hidastuminen.
S_KOKO: kuinka monta pikseliä yksi line-komento on. Luonnollisesti suuremmat luvut auttavat sähköä pääsemään kohteeseensa nopeammin, eli vähentävät line-komentoja ja kasvattavat suorituskykyä.
Myös liian monta tolppaa saattavat hidastuttaa peliä sähkötyksen aikana.
Code: Select all
SCREEN 800, 600
Const TOLPPAMÄÄRÄ = 10 //kuinka monta tolppaa pelissä ON.
Const SÄHKÖ_PITUUS = 200 //tyhmä nimi. Muuttuja kertoo kuinka pitkälle sähkö voi "hypätä"
Const KULMA_MUUTOS = 30 //mitä suurempi arvo, sitä hitaampi funktio, mutta terävämmät kulmat.
Const S_KOKO = 5 //<- mitä suurempi arvo, sitä nopeampi funktio, mutta pidemmät (ja siksi ehkä suoremmat) viivat.
Dim tolpat( TOLPPAMÄÄRÄ, 2 )
//tolpat( x, 0 ) = x-akseli
//tolpat( x, 1 ) = y-akseli
//tolpat( x, 2 ) = onko tolpassa sähköä (voi sähkötellä muita tolppia)
//Luodaan tolpat
For i = 0 To TOLPPAMÄÄRÄ
tolpat( i, 0 ) = Rand( 0, ScreenWidth() )
tolpat( i, 1 ) = Rand( 0, ScreenHeight() )
Next i
Repeat
//Hiiren 1-nappula antaa käskyn sähköttää.
If MouseDown( 1 ) Then
sähkötä = True
Else
sähkötä = False
EndIf
//käydään tolpat läpi. Vain nämä johtavat sähköä.
For i = 0 To TOLPPAMÄÄRÄ
_x = tolpat( i, 0 ) - 2 //koordinaatit
_y = tolpat( i, 1 ) - 2
//jos on annettu käsky sähköttää
If sähkötä Then
//tarkastetaan onko tolppa tarpeeksi lähellä. Jos on, sähkötetään sitä.
If Distance( MouseX(), MouseY(), _x, _y ) <= SÄHKÖ_PITUUS Then
Zap( MouseX(), MouseY(), _x, _y )
tolpat( i, 2 ) = 1 //laitetaan tolppa "sähkötetyksi"
Else
tolpat( i, 2 ) = 0 //jos ei tarpeeksi lähellä, lopetetaan sähkötys.
EndIf
Else
tolpat( i, 2 ) = 0 //lopetetaan tolppien sähkötys jos päävirta on pois.
EndIf
//käydään sähkötetyt tolpat läpi ja sähkötetään viereiset, ei-sähkötetyt tolpat.
If tolpat( i, 2 ) = 1 Then
For a = 0 To TOLPPAMÄÄRÄ
//tarkastetaan ettei ole sähköttävä tolppa, ja että kohdetolppa ei sähkötä (koska muutoin
//sähkötystä tapahtuu kahteen suuntaan, jota ei sallita)
If i <> a And tolpat( a, 2 ) = 0 Then
_x2 = tolpat( a, 0 )
_y2 = tolpat( a, 1 )
If Distance( _x, _y, _x2, _y2 ) < SÄHKÖ_PITUUS Then
Zap( _x, _y, _x2, _y2 )
EndIf
EndIf
Next a
EndIf
Color cbWhite
Circle _x, _y, 4 //piirretään tolppa
Next i
Text 20, 20, FPS()
DrawScreen
Forever
//Sähkötys-funktio
Function Zap( _sx, _sy, _ex, _ey )
_x# = _sx
_y# = _sy
Color cbLightBlue
While True
_kulma# = GetAngle( _x, _y, _ex, _ey ) + Rand( -KULMA_MUUTOS, KULMA_MUUTOS )
_oldx = _x
_oldY = _y
_x = _x + Cos( _kulma ) * S_KOKO
_y = _y - Sin( _kulma ) * S_KOKO
Line _oldx, _oldy, _x, _y
If Distance( _x, _y, _ex, _ey ) < 20 Then
Line _x, _y, _ex, _ey
Exit
EndIf
Wend
EndFunction