読者です 読者をやめる 読者になる 読者になる

フェードイン/フェードアウト。


NDSGBA と同様にブレンドという機能がハードウェアに備わってるので
半透明処理やフェードイン/アウトなんかはソフトウェア処理を行う手間がないんです。
手を抜けるところは手を抜いてこうってことで。


fade in, fade out


akkera102 さんところの「GBA develop Wiki - チュートリアル - Step.16 特殊効果 ブレンド」の解説を参考にしてます。
#define 文も拝借してしまいました(汗)。


・フェードイン/フェードアウト
ttp://page.freett.com/ntr/tech/fade.zip


アーカイブを欲しい方は上記アドレスからどうぞです。
ソースコードだけ見たいって方は下記をどうぞ。


main.c

/*---------------------------------------------------------------------------------
	
	fade in, fade out.
	
	version 0.01
	Mar 11, 2010
	
	By REGEKATSU
	
---------------------------------------------------------------------------------*/

#include <nds.h>
#include "bootBgTop.h"
#include "bootBgBottom.h"


#define BLEND_LOW(n) ((n)<<0)
#define BLEND_HIGH(n) ((n)<<8)
#define BLEND_LEVEL(n) (BLEND_LOW(n) | BLEND_HIGH(n))
#define BLEND_BALANCE(n) (BLEND_LOW(n) | BLEND_HIGH(16-n))


//---------------------------------------------------------------------------------
int main(void) {
//---------------------------------------------------------------------------------
	
	int bg_top, bg_bottom;
	
	videoSetMode(MODE_5_2D);
	videoSetModeSub(MODE_5_2D);
	
	vramSetBankA(VRAM_A_MAIN_BG);
	vramSetBankC(VRAM_C_SUB_BG);
	
	bg_top = bgInit(3, BgType_Bmp16, BgSize_B16_256x256, 0, 0);
	bg_bottom = bgInitSub(3, BgType_Bmp16, BgSize_B16_256x256, 0, 0);
	
	dmaCopy(bootBgTopBitmap, bgGetGfxPtr(bg_top), bootBgTopBitmapLen);
	dmaCopy(bootBgBottomBitmap, bgGetGfxPtr(bg_bottom), bootBgBottomBitmapLen);
	
	
	typedef enum{
		FADE_IN = 0, 
		FADE_OUT
	}FADE_MODE;
	
	int fade = FADE_IN;
	int cnt = 16;
	
	
	REG_BLDCNT     = BLEND_SRC_BG3 | BLEND_FADE_BLACK;
	REG_BLDCNT_SUB = BLEND_SRC_BG3 | BLEND_FADE_BLACK;
	
	
	while(1) {
		
		scanKeys();
		
		if(keysDown() & KEY_START){
			if(fade == FADE_IN){
				fade = FADE_OUT;
			}else{
				fade = FADE_IN;
			}
		}
		
		
		if(fade == FADE_IN){
			cnt--;
			if(cnt <  0) cnt =  0;
		}else{
			cnt++;
			if(cnt > 16) cnt = 16;
		}
		
		
		swiWaitForVBlank();
		
		REG_BLDY     = BLEND_BALANCE(cnt);
		REG_BLDY_SUB = BLEND_BALANCE(cnt);
		
	}
	
}

//---------------------------------------------------------------------------------