ページ 11

ゲームを動かしたままフェードアウトさせたい

Posted: 2012年6月02日(土) 01:52
by felnad
ゲームが動いてる状態でフェードアウトして次の処理に移行させたいのですが上手く出来ません。
↓の処理だと一瞬真っ暗になってすぐゲーム画面に戻ってしまうのですがどうすればいいでしょうか?

コード:

void gameend(){
	int i;
	SetDrawScreen( DX_SCREEN_BACK ) ;
	WaitTimer( 0 ) ;
		
	for( i = 0 ; i < 255 ; i+=3 ) // 
	{
		SetDrawBright( 255 - i , 255 - i , 255 - i ) ; 
		ScreenFlip() ;
	}
	SetDrawBright( 255 , 255 , 255 ) ; 
}

Re: ゲームを動かしたままフェードアウトさせたい

Posted: 2012年6月02日(土) 10:08
by だんごさん
この関数だと、ゲーム画面は動かないと思います。
この関数はwhile文等で繰返し呼び出されているのですよね?
もし動かしたいのなら、この関数が呼び出される毎にBrightの値を下げて行き
if文などで255まで行ったら元に戻してあげる感じではどうでしょうか?

この場合だと画面を描画する前に呼び出す必要はあります。

Re: ゲームを動かしたままフェードアウトさせたい

Posted: 2012年6月02日(土) 11:24
by へにっくす
felnad さんが書きました:ゲームが動いてる状態でフェードアウトして次の処理に移行させたいのですが上手く出来ません。
↓の処理だと一瞬真っ暗になってすぐゲーム画面に戻ってしまうのですがどうすればいいでしょうか?

コード:

void gameend(){
	int i;
	SetDrawScreen( DX_SCREEN_BACK ) ;
	WaitTimer( 0 ) ;
		
	for( i = 0 ; i < 255 ; i+=3 ) // 
	{
		SetDrawBright( 255 - i , 255 - i , 255 - i ) ; 
		ScreenFlip() ;
	}
	SetDrawBright( 255 , 255 , 255 ) ; 
}
当たり前でしょ、、
輝度の設定は、
「これから書く描画を、この明るさで書いてね♪」
という命令ですから、すでに描画されたものに対しては反映されません。
そこをもう一度考えましょう
以下のような感じ?

コード:

void gameend(){
	int i;
	SetDrawScreen( DX_SCREEN_BACK ) ;
	WaitTimer( 0 ) ;
		
	for( i = 0 ; i < 255 ; i+=3 ) // 
	{
		// メッセージ消化
		if ( 0 != ProcessMessage()  ) break;
		// 画面を初期化する
		ClearDrawScreen() ;
		// 輝度を設定する
		SetDrawBright( 255 - i , 255 - i , 255 - i ) ; 
		// フェードアウトさせたいプレイヤーを描画する
		// DrawBox( PlayerX , PlayerY ,PlayerX + 48 , PlayerY + 48 , GetColor( 255 , 0 , 0 ) , TRUE ) ;
		// 裏画面の内容を表画面に反映させる
		ScreenFlip() ;
	}
	// 輝度を元の設定にする
	SetDrawBright( 255 , 255 , 255 ) ; 
}

Re: ゲームを動かしたままフェードアウトさせたい

Posted: 2012年6月02日(土) 12:51
by softya(ソフト屋)
なにげに下記の条件に該当しているプログラムな気がします。

「補足資料.11章 書いてはいけない4つの処理」
http://dixq.net/g/h_11.html

Re: ゲームを動かしたままフェードアウトさせたい

Posted: 2012年6月02日(土) 12:59
by へにっくす
softya(ソフト屋) さんが書きました:なにげに下記の条件に該当しているプログラムな気がします。

「補足資料.11章 書いてはいけない4つの処理」
http://dixq.net/g/h_11.html
不適切な実装3. あちこちにDXライブラリ3大処理がある
に該当しますね。失礼しました…
DxLib_End()を呼ぶ直前に、gameend()を呼んでいる意識ですが
そんでもメインの他に3大処理があるのはいただけないですよねw

なのでfelnadさんも、気をつけましょう。