ページ 11

なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 19:25
by プラム
私は3Dのゲームを作っているのですが、ここのメニュー画面の作り方を参考にさせてもらったのですが、なぜかそれを付けてから表示がおかしくなってしまいました
画像 ←これ参照
カメラの初期化や、処理を間違えていじってしまったのかなと思ったのですが。何も変わっていなくて、何がおかしいのかわかりません。私は馬鹿なので。みなさん教えてくれたらうれしいです!

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 20:07
by amehirune
私は3Dゲームを作ったことがないし、そもそも「実装した部分のソースコードすら乗せられていない」ので
何故おかしくなったのかを指摘するのは難しいです。

メニュー画面の作り方のURLから、言語はC(もしくはC++)で、DXライブラリを使っているものと断定します。

以下、これは私の考え方であり、一般世間において通用するかどうかはわからないということを念頭に入れて読んでください。

・まず、きちんと「メニュー部」と「ゲーム部」に関数・メゾットやファイルを分けているか?
同じファイルや関数内に作ってしまうと、プログラムがいろいろと複雑になってしまい、バグの原因になります。読みにくくもなるし。

・メニュー部において、ゲームデータ用の変数や設定に触れる回数を、必要最低限に抑えているか?
必要のない操作は省きましょう。というか、ゲームフェーズでメインとして扱う変数は、なるべくメニューで触れないことをお勧めします。
ただし、これはあくまで私の勝手な意見です。
オフトピック
これからは質問の際に、
・使用言語、及びライブラリ
・開発環境
・変更後ソースプログラム
・症状、及び本来の動作結果(できるだけ詳しく!)
・できれば考察
をかかれることをお勧めします

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 20:43
by プラム
すみません、最近あまり、ここのサイト使ってなくて、人とのコミュニケーション不足のせいか、いろいろ詳しくわかりやすく書くことができませんでした←安定のコミュ障
言語はC++です、DxLibとWindows.h、DirectXなどを使ってます
開発環境は、win8のVC++2010です
ソースは、
game.cpp

コード:

   	
//初期化
void Game_Initialize(){

	// プレイヤーの初期化
	pl=Player_Init(pl) ;
	

	// ステージの初期化
	Stage_Init() ;

	// カメラの初期化
	Camera_Init() ;


}
	
Player.cpp

コード:

// プレイヤーの初期化;
PLAYER Player_Init( PLAYER pla )
{
		    
	// X軸のマイナス方向のディレクショナルライトに変更
    ChangeLightTypeDir( VGet( -1.0f, 0.0f, 0.0f  ) ) ;
	
	// 初期座標は原点
	pla.Position = VGet( 0.0f, 0.0f, -300.0f ) ;
	GraphHandle[0] = LoadGraph("kasoku.png");
	GraphHandle[1] = LoadGraph("kasoku2.png");

	// 回転値は0
	pla.Angle = 0.0f ;

	// ジャンプ力は初期状態では0
	pla.JumpPower = 0.0f ;

	// モデルの読み込み
	pla.ModelHandle = MV1LoadModel( "tress.mqo" ) ;

	// 初期状態では「立ち止り」状態
	pla.State = 0 ;

	// 初期状態でプレイヤーが向くべき方向はX軸方向
	pla.TargetMoveDirection = VGet( 1.0f, 0.0f, 0.0f ) ;
	return pla;
}
こんな感じです
そして、本当は、上の画像のように透けて見えず、普通に見えるはずなのですが、なぜか・・・

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 20:52
by softya(ソフト屋)
Zバッファがクリアされていない感じがします。
毎フレーム、ちゃんとClearDrawScreen()してるか確認すると良いことがあるでしょう。

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 21:00
by プラム
>>ソフト屋さん
自分もそう思って、確認したんですが、

コード:

// WinMain
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
	// ウインドウモードで起動
	ChangeWindowMode( TRUE ) ;

	// ライブラリの初期化
	if( DxLib_Init() < 0 )
		return -1 ;

	// 描画先を裏画面にする
	SetDrawScreen( DX_SCREEN_BACK ) ;
	
	Scene_Init();//初期化

	while( ProcessMessage() == 0)
	{
		// 画面をクリア
		ClearDrawScreen() ;

		Key_Update();
       

		Scene_Update();

		Scene_Draw();

		// 裏画面の内容を表画面に反映
		ScreenFlip() ;
	}
	
	Scene_Final();
	// ライブラリの後始末
	DxLib_End() ;

	// ソフト終了
	return 0 ;
}
ちゃんとこんな感じになっていました、なので原因が私にはまったくわかりません、なぜなのでしょう・・・・

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 21:26
by softya(ソフト屋)
ソースコード全体がないので細かいところは分かりませんが、ClearDrawScreen() ;をちゃんと通過しているかデバッガで確認と、2回以上の違うカメラでレンダリングしてないかなどを確認を。あとCameraNaerFarなどのZバッファ設定をちゃんとカメラの初期化で行いましょう。

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月22日(金) 21:33
by プラム
>そふとやさん
いろいろいじってたらなんか治りましたw
たぶんカメラの設定だったと思います、ありがとうございます!
みなさんありがとうございました!

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月23日(土) 02:58
by DoomMuffins
もう解決したようですが、DirectXなどで「○○を実装してからそれ以外がおかしくなった」となると、まずはレンダーステートを確認したほうがいいと思います。たとえば、メニュー描画のためZバッファーをオフにして、終わってからまたオンにすることを忘れてしまった場合、それ以降の描画もZバッファーオフとなってしまいます。

Re: なぜかメニュー画面を実施したら表示がおかしくなった

Posted: 2015年5月23日(土) 04:12
by hide
オフトピック
なんかよくわかんないけど直ったという状況はぶっちゃけた話原因を突き止めたが直せなかった時より悪い状況だと思うので、
差分確認くらいできるようにしたほうがいいと思いました。