Re: Efektit
Posted: Sun Jan 29, 2012 6:31 pm
Hienohan tuo on Hyvää työtä
EDIT:
Pitää yrittää vielä vähän kehitellä.. On niin karkea tuo minun tekele
Pitää yrittää vielä vähän kehitellä.. On niin karkea tuo minun tekele
Code: Select all
FrameLimit 40
SCREEN 800, 600
Const R_VÄLI = 5
Const R_NUM = 10
rstart = 10
rmax = 255
kasvu = 4
r = 0
Repeat
r = Explosion(r, rstart, rmax, kasvu, 0, R_VÄLI, R_NUM)
DrawScreen
Forever
Function Explosion(curR, rStart, rMax, rKasvu, tyyppi = 0, _kerrosväli = 5, _kerrosmäärä = 10)
If curR < rStart Then curR = rStart
curR = curR + rKasvu
If curR > rMax + _kerrosmäärä * _kerrosväli Then
If tyyppi = 0 Then // Looppi
curR = rStart
Else // Pysäytys
curR = -1 // Ilmoittaa siitä että efekti lopussa.
EndIf
EndIf
For i = 0 To _kerrosmäärä
col# = Max(Min(255 - ((curR - i * _kerrosväli * 1.0) / (rMax - rStart)) * 255.0, 255), 0)
Color col, col, col
Circle 400 - (curR/2 - i * _kerrosväli), 300 - (curR/2 - i * _kerrosväli), curR - (i * _kerrosväli) * 2, True
Next i
Return curR
EndFunction
Code: Select all
Const SW=80
Const SH=60
SCREEN SW*2,SH*2,0,1
SCREEN SW*2,SH*2,0,2
zoomed_screen_a = MakeImage(ScreenWidth(), ScreenHeight())
zoomed_screen = MakeImage(ScreenWidth(), ScreenHeight())
MaskImage zoomed_screen_a, 255, 0, 254
MaskImage zoomed_screen, 255, 0, 254
Dim buf1(SW,SH) As Float
Dim buf2(SW,SH) As Float
c=0
pot#=1.2
Global t
blockynes=1
disrupt#=0
bx#=0
bxv#=0
r#=0.5
g#=2
b#=5
Repeat
t=Timer()
bxv=bxv+(KeyDown(32)-KeyDown(30))*0.1
bx=bx+bxv
bxv=CurveValue(0,bxv,20)
If bx>SW+4 Then bx=-5
If bx<-5 Then bx=SW+4
Lock
For i=0 To ScreenWidth()-1
'If i<bx+5 And i>bx-5 Then
buf1(i,ScreenHeight()-1) = 255
buf1(i,ScreenHeight()-2) = 255
'EndIf
Next i
xx=CurveValue(Rand(-80,160),xx,6)
xx2=CurveValue((xx+xx3)/2,xx2,10)
xx3=CurveValue(Rand(-80,160),xx3,10)
For x=1 To SW-1
For y=1 To SH-1
c1=buf1(x+1,y+1)
c2=buf1(x-1,y-1)
c3=buf1(x-1,y+1)
c4=buf1(x+1,y-1)
newc=(c1+c2+c3+c4)/Rnd(3,5)
newc=newc-Rnd(0.1,15)
If newc<0 Then newc=0
buf2(x,y-1)=newc
Next y
Next x
For x=1 To SW-1
For y=1 To SH-1
Color Min(255,Max(0,buf2(x,y)^pot/r)),Min(255,Max(0,buf2(x,y)^pot/g)),Min(255,Max(0,buf2(x,y)^pot/b))
Line x,y,x+1,y
buf1(x,y)=buf2(x,y)
Next y
Next x
Unlock
Gosub doublePixel
DrawScreen
Forever
doublePixel:
For y=0 To ScreenHeight() / 2
CopyBox 0, y/blockynes*blockynes, 640, 1, 0, y*2, SCREEN(), Image(zoomed_screen_a)
CopyBox 0, (y+1)/blockynes*blockynes, 640, 1, 0, y*2+1, SCREEN(), Image(zoomed_screen_a)
Next y
For x=0 To ScreenWidth() / 2
CopyBox x/blockynes*blockynes, Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2, 0, Image(zoomed_screen_a), Image(zoomed_screen)
CopyBox x/blockynes*blockynes, -Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2+1, 0, Image(zoomed_screen_a), Image(zoomed_screen)
Next x
DrawImage zoomed_screen, 0, 0
Return
Oho, on kyllä hienoin tuliefekti minkä olen täällä nähnyt. Ei edes pätkinyt yhtään tuon kun vois pistää johonkin peliin niin voisi tulla nättiä jälkeä. Harmi vaan kun ei ole mitään projua, johon tuota voisi ympätä.Wingman wrote:Löysin jonkin vanhan tuliefektin raakileen jonka olin tehnyt, mutta se ei jotenkin toiminut. Korjailin hetken ja sain tällaista aikaan;
Code: Select all
Const SW=100
Const SH=100
SCREEN SW*2,SH*2,0,1
SCREEN SW*2,SH*2,0,2
zoomed_screen_a = MakeImage(ScreenWidth(), ScreenHeight())
zoomed_screen = MakeImage(ScreenWidth(), ScreenHeight())
MaskImage zoomed_screen_a, 255, 0, 254
MaskImage zoomed_screen, 255, 0, 254
Type META
Field x As Float
Field y As Float
Field s As Float
Field r As Float
Field g As Float
Field b As Float
Field kx As Float
Field ky As Float
EndType
For i=0 To 8
ba.META=New(META)
ba\x=Rand(SW)
ba\y=Rand(SW)
ba\s=8
ba\r=Rnd(1)
ba\g=Rnd(1)
ba\b=Rnd(1)
ba\kx=Rand(SW)
ba\ky=Rand(SH)
Next i
Global t
Const BLOCK=3
blockynes=BLOCK
disrupt#=0
r#=0
g#=0
b#=0
Repeat
t=Timer()
For ba.META=Each META
ba\x=CurveValue(ba\kx,ba\x,20)
ba\y=CurveValue(ba\ky,ba\y,20)
If KeyHit(57) Then
ba\kx=Rand(SW)
ba\ky=Rand(SH)
EndIf
If MouseHit(1) Then
ba\kx=MouseX()/2
ba\ky=MouseY()/2
EndIf
Next ba.META
Lock
For x=0 To SW Step BLOCK
For y=0 To SH Step BLOCK
r=0
g=0
b=0
For ba.META=Each META
r=r+(512*ba\s/(Distance(ba\x,ba\y,x,y)^2))*ba\r
g=g+(512*ba\s/(Distance(ba\x,ba\y,x,y)^2))*ba\g
b=b+(512*ba\s/(Distance(ba\x,ba\y,x,y)^2))*ba\b
Next ba
r=Min(255,Max(0,r))
g=Min(255,Max(0,g))
b=Min(255,Max(0,b))
If MouseX()/2>x-1 And MouseX()/2<x+BLOCK And MouseY()/2>y-1 And MouseY()/2<y+BLOCK Then
txt$=Int(r)+" "+Int(g)+" "+Int(b)+" "
EndIf
Color r,g,b
For yy=y To y+BLOCK
Line x,yy,x+BLOCK,yy
Next yy
Next y
Next x
Unlock
Gosub doublePixel
Color 255,255,255
Text 0,0,txt
DrawScreen
Forever
doublePixel:
For y=0 To ScreenHeight() / 2
CopyBox 0, y/blockynes*blockynes, 640, 1, 0, y*2, SCREEN(), Image(zoomed_screen_a)
CopyBox 0, (y+1)/blockynes*blockynes, 640, 1, 0, y*2+1, SCREEN(), Image(zoomed_screen_a)
Next y
For x=0 To ScreenWidth() / 2
CopyBox x/blockynes*blockynes, Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2, 0, Image(zoomed_screen_a), Image(zoomed_screen)
CopyBox x/blockynes*blockynes, -Int( (Sin(x + t*0.01)*disrupt#) ), 1, 480, x*2+1, 0, Image(zoomed_screen_a), Image(zoomed_screen)
Next x
DrawImage zoomed_screen, 0, 0
Return
Code: Select all
FrameLimit 40
Const SW = 800
Const SH = 800
SCREEN SW,SH
Const LOOTA_W = 8
Const LOOTA_H = 8
Const VALOISUUS = 0
// RED = 1
// GREEN = 2
// BLUE = 3
Const LAMPPU = 4
Const PÄIVITETTY = 5
Const MAXVALO = 6
Const VALOISUUS_ALKU = 0
Const VALOISUUS_VÄLI = 20
Const VALOISUUS_MAX = 255
Const LAMPPU001_VALOISUUS = 150
Const LAMPPU001_R = 0
Const LAMPPU001_G = 0
Const LAMPPU001_B = 0
Dim ruudukko, _R, _G, _B, _valoisuus, _valo As Byte
Dim _x, _y, _xx, _yy, valo_range, ang As Short
Dim loota(SW/LOOTA_W, SH/LOOTA_H, 5) //loota(X, Y, VALOISUUS/RED/GREEN/BLUE/LAMPPU?/PÄIVITETTY?)
For xx = 0 To SW / LOOTA_W
For yy = 0 To SH / LOOTA_H
loota(xx, yy, VALOISUUS) = VALOISUUS_ALKU
loota(xx, yy, RED) = 0
loota(xx, yy, GREEN) = 0
loota(xx, yy, BLUE) = 0
loota(xx, yy, LAMPPU) = 0
loota(xx, yy, PÄIVITETTY) = 0
Next yy
Next xx
ruudukko = 0
Repeat
Color cbWhite
If KeyHit(cbKeySpace) Then
For xx = 0 To SW / LOOTA_W
For yy = 0 To SH / LOOTA_H
loota(xx, yy, VALOISUUS) = VALOISUUS_ALKU
loota(xx, yy, RED) = 0
loota(xx, yy, GREEN) = 0
loota(xx, yy, BLUE) = 0
loota(xx, yy, LAMPPU) = 0
loota(xx, yy, PÄIVITETTY) = 0
Next yy
Next xx
EndIf
If MouseHit(1) Then
_x = ToGrid(MouseX(), LOOTA_W) / LOOTA_W
_y = ToGrid(MouseY(), LOOTA_H) / LOOTA_H
If loota(_x, _y, LAMPPU) = 0 Then
_valoisuus = loota(_x, _y, VALOISUUS)
loota(_x, _y, VALOISUUS) = (VALOISUUS_ALKU + LAMPPU001_VALOISUUS)
loota(_x, _y, RED) = loota(_x, _y, RED) + LAMPPU001_R
loota(_x, _y, GREEN) = loota(_x, _y, GREEN) + LAMPPU001_G
loota(_x, _y, BLUE) = loota(_x, _y, BLUE) + LAMPPU001_B
loota(_x, _y, LAMPPU) = 1
loota(_x, _y, PÄIVITETTY) = 1
valo_range = (LAMPPU001_VALOISUUS / VALOISUUS_VÄLI)
For ang = 0 To 359 Step 4
For radius = 0 To valo_range
_xx = ToGrid(MouseX() + Cos(ang) * (radius * LOOTA_W), LOOTA_W) / LOOTA_W
_yy = ToGrid(MouseY() - Sin(ang) * (radius * LOOTA_H), LOOTA_H) / LOOTA_H
If _xx >= 0 And _yy >= 0 And _xx < SW/LOOTA_W And _yy < SH/LOOTA_H Then
If loota(_xx, _yy, PÄIVITETTY) = 0 Then //And loota(_xx, _yy, LAMPPU) = 0 Then
_dist = Distance(_x + (LOOTA_W / 2), _y + (LOOTA_H / 2), _xx + (LOOTA_W / 2), _yy + (LOOTA_H / 2))
If loota(_xx, _yy, RED) = 0 And loota(_xx, _yy, GREEN) = 0 And loota(_xx, _yy, BLUE) = 0 Then
loota(_xx, _yy, RED) = loota(_x, _y, RED)
loota(_xx, _yy, GREEN) = loota(_x, _y, GREEN)
loota(_xx, _yy, BLUE) = loota(_x, _y, BLUE)
If loota(_xx, _yy, VALOISUUS) = 0 Then
_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
loota(_xx, _yy, VALOISUUS) = _valo
Else
_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
loota(_xx, _yy, VALOISUUS) = (_valo + loota(_xx, _yy, VALOISUUS))
EndIf
Else
_R = (loota(_xx, _yy, RED) + loota(_x, _y, RED)) / 2
_G = (loota(_xx, _yy, GREEN) + loota(_x, _y, GREEN)) / 2
_B = (loota(_xx, _yy, BLUE) + loota(_x, _y, BLUE)) / 2
loota(_xx, _yy, RED) = _R
loota(_xx, _yy, GREEN) = _G
loota(_xx, _yy, BLUE) = _B
If loota(_xx, _yy, VALOISUUS) = 0 Then
_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
loota(_xx, _yy, VALOISUUS) = _valo
Else
_valo = Max(0, loota(_x, _y, VALOISUUS) - (_dist * VALOISUUS_VÄLI))
loota(_xx, _yy, VALOISUUS) = (_valo + loota(_xx, _yy, VALOISUUS))
EndIf
EndIf
loota(_xx, _yy, PÄIVITETTY) = 1
EndIf
EndIf
Next radius
Next ang
loota(_x, _y, VALOISUUS) = loota(_x, _y, VALOISUUS) + _valoisuus
EndIf
EndIf
For xx = 0 To SW / LOOTA_W
For yy = 0 To SH / LOOTA_H
loota(xx, yy, PÄIVITETTY) = 0
_R = Min(loota(xx, yy, RED) + loota(xx, yy, VALOISUUS), VALOISUUS_MAX)
_G = Min(loota(xx, yy, GREEN) + loota(xx, yy, VALOISUUS), VALOISUUS_MAX)
_B = Min(loota(xx, yy, BLUE) + loota(xx, yy, VALOISUUS), VALOISUUS_MAX)
Color _R, _G, _B
Box xx * LOOTA_W, yy * LOOTA_H, LOOTA_W, LOOTA_H, 1
Next yy
Next xx
If ruudukko = 1 Then
Color cbBlack
For xx = 0 To SW / LOOTA_W
Line xx * LOOTA_W, 0, xx * LOOTA_W, SH
Next xx
For yy = 0 To SH / LOOTA_H
Line 0, yy * LOOTA_H, SW, yy * LOOTA_H
Next yy
EndIf
Color cbBlue
Text 5, 5, "MX: "+ MouseX() + ", MY: " + MouseY()
Text 5, 5 + 15, "SMX: "+ ToGrid(MouseX(), LOOTA_W) + ", SMY: " + ToGrid(MouseY(), LOOTA_H)
Text 5, 5 + 30, "TileX: "+ (ToGrid(MouseX(), LOOTA_W)/LOOTA_W) + ", TileY: " + (ToGrid(MouseY(), LOOTA_H)/LOOTA_H)
Text 5, 5 + 45, "_xx: " + _xx + ", _yy: " +_yy
DrawScreen
Forever
/////////////////////////////////////////////////////////////////////////////////////////
// ToGrid(X/Y, GRID_W/H)
//
// Kohdistaa X tai Y koordinaatin ruudukkoon.
Function ToGrid(_xy#, _gridwh#)
Return Int(_xy - (_xy Mod _gridwh))
EndFunction
Code: Select all
Repeat
Dot x,y
x=x+1
If x=ScreenWidth() Then
y=y+1
x=0
EndIf
Color r,g,b
r=Rand(255)
g=Rand(255)
b=Rand(255)
Drawscreen OFF
Until x=ScreenWidth() And y=ScreenHeight()
Sinulta on kadonnut DrawScreen jonnekkin?Untitled.bmp wrote:Eli väsäsinpä tälläisen hienon efektin, joka piirtää ruuduntäyteen erilaisia dotteja. Saa käyttää, ei tarvitse mainita crediiteistä, koska tämä efe on todella helppo tehdä itsekin. Tämä saa kuitenkin hienon lopputuloksen. Koodia saa ja kannattaa optimoida.
Code: Select all
Repeat Dot x,y x=x+1 If x=ScreenWidth() Then y=y+1 x=0 EndIf Color r,g,b r=Rand(255) g=Rand(255) b=Rand(255) Until x=ScreenWidth() And y=ScreenHeight()
Niin taisi käydä Taisi kadota, miettiessä, että tekiskö tosta funktion vai laittasko vain repeattiin noh, korjaan.Latexi95 wrote:Sinulta on kadonnut DrawScreen jonnekkin?Untitled.bmp wrote:Eli väsäsinpä tälläisen hienon efektin, joka piirtää ruuduntäyteen erilaisia dotteja. Saa käyttää, ei tarvitse mainita crediiteistä, koska tämä efe on todella helppo tehdä itsekin. Tämä saa kuitenkin hienon lopputuloksen. Koodia saa ja kannattaa optimoida.
Code: Select all
Repeat Dot x,y x=x+1 If x=ScreenWidth() Then y=y+1 x=0 EndIf Color r,g,b r=Rand(255) g=Rand(255) b=Rand(255) Until x=ScreenWidth() And y=ScreenHeight()
Code: Select all
Repeat
Dot x,y
x=x+1
If x=ScreenWidth() Then
y=y+1
x=0
EndIf
Color r,g,b
r=Rand(255)
g=Rand(255)
b=Rand(255)
If y >ScreenHeight() Then Exit
Forever
DrawScreen
WaitKey
Code: Select all
Function televisio()
Repeat
Dot x,y
x=x+1
If x=ScreenWidth() Then
y=y+1
x=0
EndIf
Color r,r,r
r=Rand(255)
If y >ScreenHeight() Then Exit
Forever
DrawScreen
EndFunction()
alku:
Cls
televisio()
Goto alku
En kai minä nyt Esimerkit ja tutoriaalit -alueelle lähettäisi mitään koodeja, joita ei saa käyttää vapaasti.Untitled.bmp wrote:Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.
Untitled.bmp wrote:Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.
Code: Select all
Function televisio() Repeat Dot x,y x=x+1 If x=ScreenWidth() Then y=y+1 x=0 EndIf Color r,r,r r=Rand(255) If y >ScreenHeight() Then Exit Forever DrawScreen EndFunction() alku: Cls televisio() Goto alku
Code: Select all
SW = ScreenWidth()
SH = ScreenHeight()
Function televisio(x0%, y0%, w%, h%)
Lock
For y=y0 To h-1
For x=x0 To w-1
PutPixel2 x, y, Grey( Rand(255) )
Next x
Next y
Unlock
EndFunction
Function Grey%(val%)
Return val Shl 24 + val Shl 16 + val Shl 8 + val
EndFunction
x0=0:y0=0
x1=SW:y1=SH
Repeat
televisio(x0,y0, x1,y1)
If MouseHit(1) Then x0=MouseX() : y0=MouseY()
If MouseHit(2) Then x1=MouseX() : y1=MouseY()
DrawScreen
Forever
Kiitoksia Tuon televisioefektin oli kyllä tarkoitus olla pelkkä harjoittelua ja päätinpä tehdä työstä hupia muille, jotka sitä tarvitsevat, jos tarvitsevat.Misthema wrote:Untitled.bmp wrote:Kiitoksia Chaoswarmille avusta, nyt sain valmiiksi televisioefektin, kommentoida saa ja käyttämisen luvallisuudesta en tiedä, kysykää chaoswarmilta, minun puolesta saa käyttää ilman turhia krediittejä.
Code: Select all
Function televisio() Repeat Dot x,y x=x+1 If x=ScreenWidth() Then y=y+1 x=0 EndIf Color r,r,r r=Rand(255) If y >ScreenHeight() Then Exit Forever DrawScreen EndFunction() alku: Cls televisio() Goto alku
Nopeutin efektiäsi hieman ja tein siitä säädettävän:Code: Select all
SW = ScreenWidth() SH = ScreenHeight() Function televisio(x0%, y0%, w%, h%) Lock For y=y0 To h-1 For x=x0 To w-1 PutPixel2 x, y, Grey( Rand(255) ) Next x Next y Unlock EndFunction Function Grey%(val%) Return val Shl 24 + val Shl 16 + val Shl 8 + val EndFunction x0=0:y0=0 x1=SW:y1=SH Repeat televisio(x0,y0, x1,y1) If MouseHit(1) Then x0=MouseX() : y0=MouseY() If MouseHit(2) Then x1=MouseX() : y1=MouseY() DrawScreen Forever
Code: Select all
SCREEN 800,600
For x = 0 To ScreenWidth() Step 5
For y = 0 To ScreenHeight() Step 5
Box x, y, 5, 5,0
PickColor x,y-1
up_red = getRGB(RED)
up_green = getRGB(GREEN)
up_blue = getRGB(BLUE)
PickColor x,y+1
down_red = getRGB(RED)
down_green = getRGB(GREEN)
down_blue = getRGB(BLUE)
PickColor x-1,y
left_red = getRGB(RED)
left_green = getRGB(GREEN)
left_blue = getRGB(BLUE)
PickColor x+1,y
right_red = getRGB(RED)
right_green = getRGB(GREEN)
right_blue = getRGB(BLUE)
new_red = ((up_red + down_red + left_red + right_red)/4)+Rand(0,2)
new_green = ((up_red + down_green + left_green + right_green)/4)+Rand(0,2)
new_blue = ((up_blue + down_blue + left_blue + right_blue)/4)+Rand(0,2)
Color new_red, new_green, new_blue
Next y
Next x
DrawScreen
WaitKey
Melkoisen hidas se vain on. Pystyykö boxin kohdalla puskuri lukita, jotta piirto olisi nopeampi?MrMonday wrote:MrMondayn koodinpätkä ja viesti...
Hmm... Näköjään ei, sillä muuten ruudulla ei näy mitään...
Lukittuun puskuriin voi käsittääkseni piirustella vain omilla komennoillaan/funktioillaan, mutta tuossa ei hitaus sinänsä haittaa, kun se ei muutenkaan tee mitään järkevääKonstaduck wrote:Melkoisen hidas se vain on. Pystyykö boxin kohdalla puskuri lukita, jotta piirto olisi nopeampi?MrMonday wrote:MrMondayn koodinpätkä ja viesti...
EDIT:Hmm... Näköjään ei, sillä muuten ruudulla ei näy mitään...
Jostain syystä olen onnistunut ohittamaan tuon tiedon Ehkäpä siksi, etten ole lukittua puskuria koskaan käyttänyt, mutta vikkelä se kyllä verrattain on:koodaaja wrote:Lukittuun puskuriin voi varsinaisesti siihen tarkoitettujen komentojen lisäksi piirustella Linellä, joka on siten käytettynä huomattavasti nopeampi kuin lukitsematta. Kuvittelin tämän olevan kovin yleistä tietoa
Code: Select all
SCREEN 800,600
begin:
Lock
For x = 0 To ScreenWidth() Step 5
For y = 0 To ScreenHeight() Step 5
Line x,y,ScreenWidth(),ScreenHeight()
PickColor x,y-1
up_red = getRGB(RED)
up_green = getRGB(GREEN)
up_blue = getRGB(BLUE)
PickColor x,y+1
down_red = getRGB(RED)
down_green = getRGB(GREEN)
down_blue = getRGB(BLUE)
PickColor x-1,y
left_red = getRGB(RED)
left_green = getRGB(GREEN)
left_blue = getRGB(BLUE)
PickColor x+1,y
right_red = getRGB(RED)
right_green = getRGB(GREEN)
right_blue = getRGB(BLUE)
new_red = ((up_red + down_red + left_red + right_red)/4)+Rand(0,2)
new_green = ((up_red + down_green + left_green + right_green)/4)+Rand(0,2)
new_blue = ((up_blue + down_blue + left_blue + right_blue)/4)+Rand(0,2)
Color new_red, new_green, new_blue
Next y
Next x
Unlock
DrawScreen
Goto begin