ページ 11

RPGなどのフィールド移動について

Posted: 2011年4月06日(水) 16:35
by uu
RPGなどでフィールドのある場所までいくと画面が暗転して隣のフィールドに移動しますよね
これの仕組みとやり方が分からない為、メニュー画面もタイトル画面も表示できません

常識的な質問すぎるのは分かっていますがまだCをさわったばかりなので検討がつきません
お優しい画面を暗転させて全く違う画面を表示させるという方法を教えていただきたけませんでしょうか

Re: RPGなどのフィールド移動について

Posted: 2011年4月06日(水) 16:58
by softya(ソフト屋)
このサイトのコンテンツの「C言語~ゲームプログラミングの館~ [DXライブラリ]」
http://dixq.net/g/
は一通り参考にされましたか?

この中の
33. 選択画面の作り方。
34. main関数の書き方。
は参考になると思います。
状態遷移と言う考え方を使っています。

RPGのフィールド間の移動になると更に色々とややこしい事を考えないと行けませんので、まずメニューの切り替えができるようになってください。

手前味噌ですが、私がRPG作成の講座も連載していますので勉強が進んだら参考にしてみてください。
http://dixq.net/forum/blog.php?u=114&sd=a&c=2
使われているC言語の文法やアルゴリズムの難易度が高いので初心者には厳しいかと思います。

[追記]
RPG講座でフィールド間の移動で暗転(フェードアウト・イン)は少し難しいのでわざと搭載していません。
ただ、この講座を理解できる人が追加することはさほどの難易度では無いと思います。

Re: RPGなどのフィールド移動について

Posted: 2011年4月06日(水) 17:20
by ナギ
こんにちは
簡単な場合分けを書かせていただきます。

コード:

 
/* グローバル変数部分 */
enum //enumとは番号を文字に置き換える列挙型という特殊な型です
{
	TITLE,
	GAME,
	END
};
int NumState=TITLE; //現在選んでいるシーンの番号(最初のシーンを最初に代入)

/* 遷移用関数部分 */
void GameLoop(void)//処理のループ部分に入れる。
{
	switch(NumState)//NumStateの値によって処理の流れを変える
	{
		case TITLE:
		/*~ タイトルの処理群 ~ */
		/*ここにタイトルでしたい処理を入れてください*/
		break;
		case GAME:
		/*~ ゲームの処理群 ~ */
		break;
		case END:
		/*~ 終了の処理群 ~ */
		break;
		default:
		/*~ エラー ~ */
		break;
	}
}
これは簡単なシーン遷移です。
switchで場合をわけてNumStateの番号を変えることでシーンを変えます。
関数ポインタやclassなどを使うともっと良い遷移は出来ますが、最初のうちはこれで
十分だと思います。

また、暗転の実装方法ですが
フィールドなどを描画している部分より手前(つまり処理の流れでいうとフィールド描画より後)
に透明な黒の四角形を描画して必要ならばその透過度を上げていって暗くなったら(透過度等々分からない場合はGoogle先生に)
次のシーンに移るというやり方をすればよいかと思います。

DxLibなどを使っている場合はSetBrightなどでもできるのかな?
DxLibはあまり使った事がないので、ワカリマセン。

ただ表示できないなどはそれ以前の部分が出来ていないかと思われますので、
もうしばらく学んでから取り組んでいくとよいかもしれません。
ワタシは触れたことがないので分からないのですが、四聖龍神録や
softyaさんが紹介なされているページなどを見ると良いかと思います。