私は3Dのゲームを作っているのですが、ここのメニュー画面の作り方を参考にさせてもらったのですが、なぜかそれを付けてから表示がおかしくなってしまいました
←これ参照
カメラの初期化や、処理を間違えていじってしまったのかなと思ったのですが。何も変わっていなくて、何がおかしいのかわかりません。私は馬鹿なので。みなさん教えてくれたらうれしいです!
なぜかメニュー画面を実施したら表示がおかしくなった
Re: なぜかメニュー画面を実施したら表示がおかしくなった
私は3Dゲームを作ったことがないし、そもそも「実装した部分のソースコードすら乗せられていない」ので
何故おかしくなったのかを指摘するのは難しいです。
メニュー画面の作り方のURLから、言語はC(もしくはC++)で、DXライブラリを使っているものと断定します。
以下、これは私の考え方であり、一般世間において通用するかどうかはわからないということを念頭に入れて読んでください。
・まず、きちんと「メニュー部」と「ゲーム部」に関数・メゾットやファイルを分けているか?
同じファイルや関数内に作ってしまうと、プログラムがいろいろと複雑になってしまい、バグの原因になります。読みにくくもなるし。
・メニュー部において、ゲームデータ用の変数や設定に触れる回数を、必要最低限に抑えているか?
必要のない操作は省きましょう。というか、ゲームフェーズでメインとして扱う変数は、なるべくメニューで触れないことをお勧めします。
ただし、これはあくまで私の勝手な意見です。
何故おかしくなったのかを指摘するのは難しいです。
メニュー画面の作り方のURLから、言語はC(もしくはC++)で、DXライブラリを使っているものと断定します。
以下、これは私の考え方であり、一般世間において通用するかどうかはわからないということを念頭に入れて読んでください。
・まず、きちんと「メニュー部」と「ゲーム部」に関数・メゾットやファイルを分けているか?
同じファイルや関数内に作ってしまうと、プログラムがいろいろと複雑になってしまい、バグの原因になります。読みにくくもなるし。
・メニュー部において、ゲームデータ用の変数や設定に触れる回数を、必要最低限に抑えているか?
必要のない操作は省きましょう。というか、ゲームフェーズでメインとして扱う変数は、なるべくメニューで触れないことをお勧めします。
ただし、これはあくまで私の勝手な意見です。
オフトピック
これからは質問の際に、
・使用言語、及びライブラリ
・開発環境
・変更後ソースプログラム
・症状、及び本来の動作結果(できるだけ詳しく!)
・できれば考察
をかかれることをお勧めします
・使用言語、及びライブラリ
・開発環境
・変更後ソースプログラム
・症状、及び本来の動作結果(できるだけ詳しく!)
・できれば考察
をかかれることをお勧めします
ほら、来いよ!! 誤字や矛盾を指摘したい奴から、前に出てこいよぉおおおおおおおッ!!!
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
※都合により、不定期でしか現れません。即返などはできませんのでご了承ください※
Re: なぜかメニュー画面を実施したら表示がおかしくなった
すみません、最近あまり、ここのサイト使ってなくて、人とのコミュニケーション不足のせいか、いろいろ詳しくわかりやすく書くことができませんでした←安定のコミュ障
言語はC++です、DxLibとWindows.h、DirectXなどを使ってます
開発環境は、win8のVC++2010です
ソースは、
game.cpp
Player.cpp
こんな感じです
そして、本当は、上の画像のように透けて見えず、普通に見えるはずなのですが、なぜか・・・
言語はC++です、DxLibとWindows.h、DirectXなどを使ってます
開発環境は、win8のVC++2010です
ソースは、
game.cpp
//初期化
void Game_Initialize(){
// プレイヤーの初期化
pl=Player_Init(pl) ;
// ステージの初期化
Stage_Init() ;
// カメラの初期化
Camera_Init() ;
}
// プレイヤーの初期化;
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;
}
そして、本当は、上の画像のように透けて見えず、普通に見えるはずなのですが、なぜか・・・
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: なぜかメニュー画面を実施したら表示がおかしくなった
Zバッファがクリアされていない感じがします。
毎フレーム、ちゃんとClearDrawScreen()してるか確認すると良いことがあるでしょう。
毎フレーム、ちゃんとClearDrawScreen()してるか確認すると良いことがあるでしょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: なぜかメニュー画面を実施したら表示がおかしくなった
>>ソフト屋さん
自分もそう思って、確認したんですが、
ちゃんとこんな感じになっていました、なので原因が私にはまったくわかりません、なぜなのでしょう・・・・
自分もそう思って、確認したんですが、
// 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 ;
}
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: なぜかメニュー画面を実施したら表示がおかしくなった
ソースコード全体がないので細かいところは分かりませんが、ClearDrawScreen() ;をちゃんと通過しているかデバッガで確認と、2回以上の違うカメラでレンダリングしてないかなどを確認を。あとCameraNaerFarなどのZバッファ設定をちゃんとカメラの初期化で行いましょう。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: なぜかメニュー画面を実施したら表示がおかしくなった
>そふとやさん
いろいろいじってたらなんか治りましたw
たぶんカメラの設定だったと思います、ありがとうございます!
みなさんありがとうございました!
いろいろいじってたらなんか治りましたw
たぶんカメラの設定だったと思います、ありがとうございます!
みなさんありがとうございました!
-
- 記事: 1
- 登録日時: 9年前
Re: なぜかメニュー画面を実施したら表示がおかしくなった
もう解決したようですが、DirectXなどで「○○を実装してからそれ以外がおかしくなった」となると、まずはレンダーステートを確認したほうがいいと思います。たとえば、メニュー描画のためZバッファーをオフにして、終わってからまたオンにすることを忘れてしまった場合、それ以降の描画もZバッファーオフとなってしまいます。
Re: なぜかメニュー画面を実施したら表示がおかしくなった
オフトピック
なんかよくわかんないけど直ったという状況はぶっちゃけた話原因を突き止めたが直せなかった時より悪い状況だと思うので、
差分確認くらいできるようにしたほうがいいと思いました。
差分確認くらいできるようにしたほうがいいと思いました。