ページ 11

背景スクロールのラグを無くしたい

Posted: 2011年9月06日(火) 17:14
by orekue
DXライブラリを使った縦スクロールのSTGを作ろうとしているのですが、
背景をスクロールさせる際にラグが生じてしまい、カクついてしまいます。
このラグを無くす、もしくは減らす方法があれば教えて頂きたいと思います。

今のやり方は、1枚の画像をループさせるといったものです。
(画像のサイズは640*960です)

C言語の知識はほとんどありません。。。

コードは以下のようになってます

コード:

(略)
	int Map_02Y , MapFlag_02 , MapGraph ;

	//画面モードの設定
	SetGraphMode( 640 , 480 , 16 ) ;

	//ウィンドウモードにする
	ChangeWindowMode( TRUE ) ;

	//DXライブラリ初期化
	if( DxLib_Init() == -1 ) return -1 ;

	//描画先を裏画面にする
	SetDrawScreen( DX_SCREEN_BACK ) ;

	//マップ関係
	MapGraph = LoadGraph("画像パス") ;
	Map_02Y = -480 ;

	while( 1 )
	{

		//画面にあるものを一旦全部消す
		ClsDrawScreen() ;

		//マップ描写
		DrawGraph( 0 , Map_02Y , MapGraph , FALSE ) ;
		if( Map_02Y < 0 )
		{
			Map_02Y += 6 ;
		}
		else
		{
		Map_02Y = -480 ;
		}
	}

		//裏画面を反映
		ScreenFlip() ;

		//メッセージ処理
		if( ProcessMessage() < 0 ) break ;

		//ESCキーで抜ける
		if( CheckHitKey( KEY_INPUT_ESCAPE ) ) break;

	}


	//DXライブラリ使用の終了
	DxLib_End() ;

	//ソフトの終了
	return 0 ;
}

宜しくお願いします

Re: 背景スクロールのラグを無くしたい

Posted: 2011年9月06日(火) 17:24
by softya(ソフト屋)
まずC言語の基本ルール、if文やwhile文など基本文法を理解しないと難しいと思います。
このコードってコンパイル通りますか?while( 1 )ループの{}の対応が変なのですが。

あと画面サイズの設定がどうみても640*480です。
//画面モードの設定
SetGraphMode( 640 , 480 , 16 ) ;

Re: 背景スクロールのラグを無くしたい

Posted: 2011年9月06日(火) 18:06
by ISLe
カクつくのは毎フレームですか?
そうであれば見当違いになってしまいますが。

二画面分を重複して持った画像であるとして、480引くときは、背景スクロールが一フレームだけ停止するのではないでしょうか。

Re: 背景スクロールのラグを無くしたい

Posted: 2011年9月06日(火) 23:28
by orekue
御回答有難う御座います

>まずC言語の基本ルール、if文やwhile文など基本文法を理解しないと難しいと思います。
>このコードってコンパイル通りますか?while( 1 )ループの{}の対応が変なのですが。

そうですか、、、もうちょっと勉強してこようと思います。
36行目の}は消し忘れてましたorz
そこと2行目の全角スペースを半角にしたら通りました

>あと画面サイズの設定がどうみても640*480です。
画像は2画面分のサイズにしてあります


>カクつくのは毎フレームですか?
>そうであれば見当違いになってしまいますが。

>二画面分を重複して持った画像であるとして、480引くときは、背景スクロールが一フレームだけ停止するのではないでしょうか。

そうです!それです
480引くときに1フレームだけ停まってしまうんです、、、

Re: 背景スクロールのラグを無くしたい

Posted: 2011年9月06日(火) 23:52
by ISLe
orekue さんが書きました:>二画面分を重複して持った画像であるとして、480引くときは、背景スクロールが一フレームだけ停止するのではないでしょうか。

そうです!それです
480引くときに1フレームだけ停まってしまうんです、、、
右側の画像を表示して、次のフレームで左側の画像を表示することになるので、1フレームだけ同じ映像が続きます。

その場しのぎ的ですが。

コード:

        //マップ描写
        DrawGraph( 0 , Map_02Y , MapGraph , FALSE ) ;
        Map_02Y += 6 ;
        if( Map_02Y > 0 )
        {
            Map_02Y -= 480 ;
        }

Re: 背景スクロールのラグを無くしたい

Posted: 2011年9月07日(水) 14:50
by orekue
ISLe さんが書きました: 右側の画像を表示して、次のフレームで左側の画像を表示することになるので、1フレームだけ同じ映像が続きます。

その場しのぎ的ですが。

コード:

        //マップ描写
        DrawGraph( 0 , Map_02Y , MapGraph , FALSE ) ;
        Map_02Y += 6 ;
        if( Map_02Y > 0 )
        {
            Map_02Y -= 480 ;
        }
おお・・・良くなりました!
改めてコード見てみたら-480に戻ってから+6してませんでした、、、

助かりました、有難うございました