Jeder Pixel ist in einer Bank gespeichert und kann daher sehr leicht
manipuliert werden (Blur-Effekt etc.). Mehr als ne Spielerei ist es
allerdings nicht.BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Graphics 320,240,32,2 SetBuffer BackBuffer()
Global bank = CreateBank(320*240*4)
While Not KeyDown(1) BankCircle(MouseX(),MouseY(),7,$FF0000) w = (w + 5) Mod 360 For i = 1 To 360 Step 60 BankCircle(MouseX()+Cos(i+w)*12,MouseY()+Sin(i+w)*12,5,$FF0000) Next If r > 240 Then rp = -1 If r < 15 Then rp = 1 If g > 240 Then gp = -1 If g < 15 Then gp = 1 If b > 240 Then bp = -1 If b < 15 Then bp = 1 r = r + Rand(2) * rp g = g + Rand(4) * gp b = b + Rand(6) * bp BlurBank(r,g,b,0.95) Update Wend End
Function BlurBank(r,g,b,factor#=0.85,dirx=0,diry=0) For x = 319 To 0 Step -1 For y = -1 To 237 rgb = Get(x,y) rb# = (rgb And $FF0000) / $10000 * factor + r * (1 - factor) gb# = (rgb And $FF00) / $100 * factor + g * (1 - factor) bb# = (rgb And $FF) * factor + b * (1 - factor) PokeInt(bank,(x+1)*4+(y+1)*320*4,Int(rb) * $10000 + Int(gb) * $100 + Int(bb)) Next Next End Function
Function ClsBank(col=0) For x = 0 To 319 For y = 0 To 239 PokeInt(bank,x*4+y*320*4,col) Next Next End Function
Function BankCircle(x,y,size,col) For w = 0 To 359 tx = x + Cos(w) * size ty = y + Sin(w) * size If (tx < 320) And (ty < 240) And (tx >= 0) And (ty >= 0) Then PokeInt(bank,tx*4+ty*320*4,col) Next End Function
Function Update() LockBuffer() For x = 0 To 319 For y = 0 To 239 WritePixelFast(x,y,PeekInt(bank,x*4+y*320*4)) Next Next UnlockBuffer() Flip False End Function
Function Set(x,y,value) If (x < 320) And (y < 240) And (x >= 0) And (y >= 0) Then PokeInt(bank,x*4+y*320*4,value) End Function
Function Get(x,y) If (x < 320) And (y < 240) And (x >= 0) And (y >= 0) Then Return PeekInt(bank,x*4+y*320*4) Else Return 0 EndIf End Function
[edit] Schaltet den Debugger aus, ohne läufts bei mir flüssig wie Butter
(ausm Gefühl her etwa 60 FPS).
|