Stormy
Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 04.06.2005, 17:45 Titel: SCRIPT: FadeIn und FadeOut für 16-Bit-Screens |
|
|
Hier eine kleine Routine um Bildübergange zu erzeugen, das untere Beispiel macht folgende Dinge:
1. Wechsel vom Bild zu Weiß
2. Wechsel von Weiß zum Bild
3. Wechsel vom Bild zu Schwarz
4. Wechsel von Schwarz zum Bild
Code: | ' ***************************************************
' * Written by Paul Grunewald (Stormy) *
' ***************************************************
' * Some little fader-examples for 16bit-screens. *
' * Feel free and use it as u like, but about *
' * some credits I would be delighted. ;-) *
' * June 4 2005 *
' * Storm-Master@gmx.de, http://www.storm-master.de *
' ***************************************************
DECLARE SUB FadeIn (Steps AS INTEGER, X AS INTEGER,Y AS INTEGER,X2 AS INTEGER,Y2 AS INTEGER,origin AS INTEGER = -1)
DECLARE SUB FadeOut (Steps AS INTEGER, X AS INTEGER,Y AS INTEGER,X2 AS INTEGER,Y2 AS INTEGER,origin = -1)
DECLARE SUB FadeScreen (Amount, X, Y, X2, Y2, buffer AS ANY PTR)
DECLARE SUB FillScreen ()
' Fixed values:
CONST scrnX = 320
CONST scrnY = 240
CONST smoothness = 32 ' the bigger the number, the better it is (max: 256)
CONST white = 1
CONST black = -1
SCREEN 14, 16, 2,&h1 ' 320x240x16bit
SCREENSET 1, 0
CLS
BLOAD "nature.bsv", 0 ' Use this is only in 320x240x16bit,
'CALL FillScreen ' instead of BLOADing the picture u can also use
' FillScreen.
SCREENCOPY: SLEEP
LOCATE 1: PRINT "Fading to white... ": CALL FadeOut (smoothness,0,0,scrnX-1,scrnY-1,white)
LOCATE 1: PRINT "Fading back from white...": CALL FadeIn (smoothness,0,0,scrnX-1,scrnY-1,white)
LOCATE 1: PRINT "Fading to black... ": CALL FadeOut (smoothness,0,0,scrnX-1,scrnY-1,black)
LOCATE 1: PRINT "Fading back from black...": CALL FadeIn (smoothness,0,0,scrnX-1,scrnY-1,black)
PRINT "Finished! ;-)": SCREENCOPY: SLEEP: END
SUB FadeIn (Steps AS INTEGER, X AS INTEGER,Y AS INTEGER,X2 AS INTEGER,Y2 AS INTEGER,origin = -1)
dim tmp_array(ABS(X-X2-1)*ABS(Y-Y2-1)*2) as UBYTE, t AS INTEGER
GET (X,Y)-(X2,Y2), tmp_array(0)
t = INT(256 / Steps) * origin
FOR e = Steps TO 1 STEP -1
PUT (X,Y), tmp_array(0), PSET
FadeScreen (t*e, X,Y,X2,Y2, 0)
WAIT &h3DA, 8
SCREENCOPY
NEXT e
PUT (X,Y), tmp_array(0), PSET
END SUB
SUB FadeOut (Steps AS INTEGER, X AS INTEGER,Y AS INTEGER,X2 AS INTEGER,Y2 AS INTEGER,origin = -1)
dim tmp_array(ABS(X-X2-1)*ABS(Y-Y2-1)*2) as UBYTE, t AS INTEGER
GET (X,Y)-(X2,Y2), tmp_array(0)
t = INT(256 / Steps) * origin
FOR e = 1 TO Steps STEP 1
PUT (X,Y), tmp_array(0), PSET
FadeScreen (t*e, X,Y,X2,Y2, 0)
' originally i would prefer this: FadeScreen (t*e, X,Y,X2,Y2, @tmp_array(0)), but this is causing bugs in FB .14B
WAIT &h3DA, 8
SCREENCOPY
NEXT e
PUT (X,Y), tmp_array(0), PSET
END SUB
SUB FadeScreen (Amount, X, Y, X2, Y2, buffer AS ANY PTR)
DIM col AS LONG, c(3) AS INTEGER
FOR e = X TO X2
FOR i = Y TO Y2
col = POINT(e,i,buffer)
c(1) = (col SHR 16) AND &hFF
c(2) = (col SHR 8) AND &hFF
c(3) = col AND &hFF
FOR t = 1 TO 3
c(t) += Amount
IF c(t) <= 0 THEN c(t) = 0
IF c(t) >= 255 THEN c(t) = 255
NEXT t
PSET buffer,(e,i), RGB(c(1),c(2),c(3))
NEXT i
NEXT e
END SUB
SUB FillScreen ()' This sub fills the screen
Circles = 50
FOR i = 1 TO Circles
X = INT(RND * scrnX) + 1
Y = INT(RND * scrnY) + 1
Size = INT(RND * 50) + 1
r = INT(RND * 256) + 1
g = INT(RND * 256) + 1
b = INT(RND * 256) + 1
CIRCLE (X, Y), Size, RGB(r,g,b), , , , F
NEXT i
END SUB |
Um das ganze auszuprobieren, ladet euch diese Datei runter: fader.zip (Es ist auch eine EXE dabei)
gruß, Stormy _________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|