Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

SCRIPT: FadeIn und FadeOut für 16-Bit-Screens

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 04.06.2005, 16:45    Titel: SCRIPT: FadeIn und FadeOut für 16-Bit-Screens Antworten mit Zitat

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz