QB64.org Forum

Active Forums => QB64 Discussion => Topic started by: thesolarcode on December 09, 2018, 12:22:34 pm

Title: How to smoothly fadeout desktop?
Post by: thesolarcode on December 09, 2018, 12:22:34 pm
For a simple game, I'd like to start it with fading out the desktop.
I have some code which nearly does what I want, but it blinks ugly - maybe someone can help me.

Code: QB64: [Select]
  1.  
  2. screenx = _WIDTH(img&)    
  3. screeny = _HEIGHT(img&)
  4. SCREEN _NEWIMAGE(screenx, screeny, 32)
  5. _PUTIMAGE (0, 0)-(screenx-1, screeny-1), img&
  6.  
  7. ' Fade out
  8. FOR i% = 0 TO 255 STEP 5
  9.   _LIMIT 50                          'control fade speed
  10.   _PUTIMAGE (0, 0)-(screenx-1, screeny-1), img&
  11.   LINE (0, 0)-(screenx-1, screeny-1), _RGBA(0, 0, 0, i%), BF 'increase black box transparency
  12.  
Title: Re: How to smoothly fadeout desktop?
Post by: bplus on December 09, 2018, 12:59:35 pm
Why do you have sleep before fadeout?

Never mind.

The blink is the program starting up. It might be less if _limit put after display instead of before ie
update THEN display THEN delay.
Title: Re: How to smoothly fadeout desktop?
Post by: thesolarcode on December 09, 2018, 01:24:58 pm
I added the sleep to see where the blinking is happening.
I thought first it blinks due to the program startup, but on my PC there is some ugly blink right after the 3 second sleep (actually it looks like the fade out starts with a black image/screen), and at that time I would guess it is not anymore caused by any startup or setup of the screen.

I tried to move the _limit to after display as you suggested, but don't see any difference.
Title: Re: How to smoothly fadeout desktop?
Post by: Pete on December 09, 2018, 01:27:21 pm
Sometimes my system locks up with _FULLSCREEN, so I tested it this way and added $SCREENHIDE and $SCREENSHOW...

Code: QB64: [Select]
  1. screenx = _WIDTH(img&)
  2. screeny = _HEIGHT(img&)
  3. SCREEN _NEWIMAGE(screenx, screeny, 32)
  4. _SCREENMOVE -5, -25
  5. '_FULLSCREEN
  6. _PUTIMAGE (0, 0)-(screenx - 1, screeny - 1), img&
  7.  
  8. ' Fade out
  9. FOR i% = 0 TO 255 STEP 5
  10.     _LIMIT 50 'control fade speed
  11.     _PUTIMAGE (0, 0)-(screenx - 1, screeny - 1), img&
  12.     LINE (0, 0)-(screenx - 1, screeny - 1), _RGBA(0, 0, 0, i%), BF 'increase black box transparency
  13.     _DISPLAY
  14.  

_SCREENMOVE -5, -25

That statement centers it over my desktop, perfectly at 1366 x 768 desktop resolution. The -25 moves the QB64 title bar off the screen.

Try it with _FULLSCREEN, too. Just unremark it.

Oh, I came back to edit out that _DELAY .1. It turns out it will work without any delay.

Pete
Title: Re: How to smoothly fadeout desktop?
Post by: bplus on December 09, 2018, 01:30:14 pm
I don't see difference either, I think now it is _FULLSCREEN that causes the blink.

What if you went from black to the image you want, a fade in so the blackout works for you.

Pete's code works better for me.
Title: Re: How to smoothly fadeout desktop?
Post by: thesolarcode on December 09, 2018, 03:16:41 pm
Wow, Pete's code works much better, seems like the _FULLSCREEN is the issue.
I can live with the short blink at the start.

Thanks :)
Title: Re: How to smoothly fadeout desktop?
Post by: Pete on December 09, 2018, 03:39:48 pm

Wow, Pete's code works much better, seems like the _FULLSCREEN is the issue.
I can live with the short blink at the start.

Thanks :)


Well, the quote definitely looks better in FULLSCREEN. :D

Pete
Title: Re: How to smoothly fadeout desktop?
Post by: TempodiBasic on December 09, 2018, 06:27:49 pm
I can confirm Pete experience

this code without _FULLSCREEN  works well with a bit flickering at the start... just a little
in the while with _FULLSCREEN the flickering is like an heartquake!

Code: QB64: [Select]
  1. screenx = _WIDTH(img&)
  2. screeny = _HEIGHT(img&)
  3. SCREEN _NEWIMAGE(screenx, screeny, 32)
  4. _SCREENMOVE -1, -26
  5.  
  6. _PUTIMAGE (0, 0)-(screenx - 1, screeny - 1), img&
  7.  
  8. ' Fade out
  9. FOR i% = 0 TO 255 STEP 5
  10.     _LIMIT 50 'control fade speed
  11.     _PUTIMAGE (0, 0)-(screenx - 1, screeny - 1), img&
  12.     LINE (0, 0)-(screenx - 1, screeny - 1), _RGBA(0, 0, 0, i%), BF 'increase black box transparency
  13.     _DISPLAY
the results seem the same also in this manner...
also my Notebook screen is set to 1366x768 and I need to move screen to -1 , -26 to hide title bar and left border of window.

let me say: Exellent tip Pete!
Title: Re: How to smoothly fadeout desktop?
Post by: Pete on December 09, 2018, 06:45:27 pm
Thank you. Some of this non-SCREEN 0 stuff is fun at times. If you're up to some really crazy stuff, have a look at my Firefox session manager app: https://www.qb64.org/forum/index.php?topic=860.0

Pete